创建(插入)数组索引

时间:2012-05-01 08:14:24

标签: php arrays

我已经放在下面

[0]
{
    [0]=>'a'
    [2]=>'b'
    [5]=>'c'
    [6]=>'d'
}

否我想要的是插入未创建的数组索引并将其值设置为“0”。

例如:在这种情况下,我想要输出如下,而不是上面的输出。任何人都可以给我看一个代码示例.............我尝试使用array_fill()但是没有工作它只是在结尾插入数组索引。

array_fill($b1, 1, "0");

期望的输出:

[0]
    {
        [0]=>'a'
        [1]=>'0'
        [2]=>'b'
        [3]=>'0'
        [4]=>'0'
        [5]=>'c'
        [6]=>'d'
    }

4 个答案:

答案 0 :(得分:1)

在阵列中循环,观察按键。每当最后一次迭代从当前键开始超过1时,执行一个短暂的循环来捕获数组内容。

$newArray = array();
$lastKey = 0;

foreach ( $array as $key => $value ) {
  while ( $lastKey++ < $key ) $newArray[] = 0;
  $newArray[$key] = $value;
}

输出结果为:

Array
(
    [0] => a
    [1] => 0
    [2] => b
    [3] => 0
    [4] => 0
    [5] => c
    [6] => d
)

演示:http://codepad.org/9EnowzqL

答案 1 :(得分:1)

function fill_missing_keys($array)
{
    $arr_keys = array_keys ($array);
    $all_keys = range(0, max($arr_keys));  
    $missing_keys = array_diff($all_keys, $arr_keys);
    $zero_array = array_fill_keys ($missing_keys, '0');
    $filled_array = $array + $zero_array; 
    ksort($filled_array);
    return $filled_array;
}

可以在此处找到运行示例:http://ideone.com/jDU99

答案 2 :(得分:0)

实际上,我想到的第一件事就是在插入新元素后按键(ksortDocs对数组进行排序:

ksort($array);

这可能已经解决了你的问题。其他一切都需要更多的工作。

修改:如果您需要设置所有未设置,那么也非常直接:

$array = array(/* of set elements */);
$array += array_fill($start, $end, "0"); # fill only unset, array union operator
ksort($array);

答案 3 :(得分:0)

我相信(未经测试)这将起作用:

  // get the first used key
  list($firstkey, $firstval)=each(asort($input_array));
  $input_array[$firstkey]=$firstval;

  // get the last used key
  list($lastkey, $lastval)=each(arsort($input_array));
  $input_array[$lastkey]=$lastval;

  $output_array=array_replace(array_fill($firstkey, $lastkey, 0), $input_array);