我有一个包含以下条目的数组:
$row['10']['something'] = "21";
$row['5']['something'] = "42";
我想创建一个从索引0到10的字符串。但是只设置了索引"5"answers"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查询填充。它将完全覆盖现有的数组。
再短一点
for($i=0; $i<=10; $i++) {
if ($i>0) $string .= ', ';
$string .= isset($row[$i]['something']) ? $row[$i]['something'] : '0';
}
听起来你想要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);
array_fill初始化新数组,foreach覆盖选定的索引并连接以创建最终字符串,这是一种可接受的方法。
$newArray=array_fill(0, 10, 0);
foreach($row as $key => $value) $newArray[$key] = array_shift($value);
echo join(' ',$newArray);
与array_fill和Array Operand +
$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 ) )