Php 创建(插入)数组索引
我已经发布了如下内容Php 创建(插入)数组索引,php,arrays,Php,Arrays,我已经发布了如下内容 [0] { [0]=>'a' [2]=>'b' [5]=>'c' [6]=>'d' } 否我想要的是插入未创建的数组索引并将其值设置为“0” e、 g:在这种情况下,我想要下面的输出,而不是上面的输出。有人能给我看一个代码样本吗。。。。。。。。。。。。。我尝试使用数组_fill(),但没有成功,它只是在末尾插入数组索引 array_fill($b1, 1, "0"); 期望输出: [0] {
[0]
{
[0]=>'a'
[2]=>'b'
[5]=>'c'
[6]=>'d'
}
否我想要的是插入未创建的数组索引并将其值设置为“0”
e、 g:在这种情况下,我想要下面的输出,而不是上面的输出。有人能给我看一个代码样本吗。。。。。。。。。。。。。我尝试使用数组_fill(),但没有成功,它只是在末尾插入数组索引
array_fill($b1, 1, "0");
期望输出:
[0]
{
[0]=>'a'
[1]=>'0'
[2]=>'b'
[3]=>'0'
[4]=>'0'
[5]=>'c'
[6]=>'d'
}
实际上,首先想到的是在插入新元素后按键()对数组进行排序:
ksort($array);
这可能已经解决了你的问题。其他一切都需要多做一些工作
编辑:如果您需要设置所有未设置项,这也很简单:
$array = array(/* of set elements */);
$array += array_fill($start, $end, "0"); # fill only unset, array union operator
ksort($array);
我相信(未经测试)这将起作用:
// 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,就执行一个简短的while循环以捕获数组内容
$newArray = array();
$lastKey = 0;
foreach ( $array as $key => $value ) {
while ( $lastKey++ < $key ) $newArray[] = 0;
$newArray[$key] = $value;
}
演示:
运行示例可以在这里找到:即
$newArray
的输出。
Array
(
[0] => a
[1] => 0
[2] => b
[3] => 0
[4] => 0
[5] => c
[6] => d
)
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;
}