PHP:数组添加索引(如果不存在)

时间:2014-06-10 20:40:15

标签: php arrays array-map

我有一个包含这些条目的数组:

$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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

array_fill初始化新数组, foreach 覆盖选定的索引,join创建最终字符串,这是一种可接受的方式。

$newArray=array_fill(0, 10, 0);
foreach($row as $key => $value) $newArray[$key] = array_shift($value);
echo join(' ',$newArray);

答案 2 :(得分:0)

稍微短一些

for($i=0; $i<=10; $i++) {
  if ($i>0) $string .= ', ';
  $string .= isset($row[$i]['something']) ? $row[$i]['something'] : '0';
}

答案 3 :(得分:0)

使用array_fill和Array操作数+

TIME()

结果

$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 );