2012-05-01 49 views
1

我已经放出来像下面创建(插入)数组索引

[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' 
    } 

回答

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

+0

的'$ newArray'输出即是。 – hakre

+0

@hakre是的,如果不清楚,我很抱歉。 – Sampson

0

其实,想到的第一件事就是整理由按键阵列(ksortDocs后您插入新的元素:

ksort($array); 

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

编辑:如果您需要设置全部被复位,那个漂亮的直线前进,以及:

$array = array(/* of set elements */); 
$array += array_fill($start, $end, "0"); # fill only unset, array union operator 
ksort($array); 
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); 
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