0

私はこれらのエントリを持つ配列を持っています:

$row['10']['something'] = "21";
$row['5']['something'] = "42";

インデックス0から10までの文字列を作りたいのですが、インデックス「5」と「10」しか設定されていません。ただし、次のような文字列が必要です。

0, 0, 0, 0, 42, 0, 0, 0, 0, 21 

現在、私はこれを使用しています:

for($i=0; $i <= 10; $i++) {
        if (!array_key_exists($i, $row))
            $row[$i]['something'] = 0;
        if ($i == 10)
            $string .= $row['10']['something'];
        else
            $string .= $row[$i]['something'].', ';
    }

しかし、私はそれをもっと効率的にする必要があります。array_map と implode を実行できましたが、追加する方法がわかりません0, 0, 0,...21, 42

明確にするために:

$rowこの例で呼び出された配列は、SQL クエリから入力されているため、単一のインデックスを上書きすることはできません。既存の配列を完全に上書きします。

4

4 に答える 4

1

array_fillを使用して新しい配列を初期化し、foreachを使用して選択したインデックスをオーバーライドし、結合して最終的な文字列を作成します。これは許容できる方法です。

$newArray=array_fill(0, 10, 0);
foreach($row as $key => $value) $newArray[$key] = array_shift($value);
echo join(' ',$newArray);
于 2014-06-10T21:37:20.803 に答える
1

少しだけ短い

for($i=0; $i<=10; $i++) {
  if ($i>0) $string .= ', ';
  $string .= isset($row[$i]['something']) ? $row[$i]['something'] : '0';
}
于 2014-06-10T20:51:39.073 に答える
1

array_fill() と array_merge() が必要なようです

http://us1.php.net//manual/en/function.array-fill.php

http://www.php.net//manual/en/function.array-merge.php

  • 新しいアレイを作成する
  • array_fill() を使用して 0 で埋めます
  • 新しい配列のインデックスを、適切なインデックスの古い配列の値で上書きします

$newarray = array_fill(0, 23, 0);
$newarray = array_merge($row, $newarray);

于 2014-06-10T20:43:44.933 に答える
0

array_fill と配列オペランド +

$row['10']['something'] = "21";
$row['5']['something'] = "42";

echo "<p>row:<p>" ;
print_r( $row );

$maxIdx = max(array_keys($row)) + 1;
$newarray = array_fill(0,  $maxIdx , 0 );

echo "<p>newarray:<p>" ;
print_r( $newarray );

$newrow = $row + $newarray;
ksort($newrow);
echo "<p>newrow:<p>" ;
print_r( $newrow );

結果

row:

Array ( [10] => Array ( [something] => 21 ) [5] => Array ( [something] => 42 ) )

newarray:

Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 )

newrow:

Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => Array ( [something] => 42 ) [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => Array ( [something] => 21 ) )
于 2015-11-19T18:32:42.223 に答える