【发布时间】:2009-04-08 05:33:17
【问题描述】:
例子:
我有这样的数组:
数组( [0] => 苹果 [2] => 橙色 [5] => 梨 [8] => 梨 )
有一个函数可以补全缺失的索引:1,3,4,6,7????
【问题讨论】:
例子:
我有这样的数组:
数组( [0] => 苹果 [2] => 橙色 [5] => 梨 [8] => 梨 )
有一个函数可以补全缺失的索引:1,3,4,6,7????
【问题讨论】:
对于较大的数组,这应该会更快。对于较小的数组,任何方法都可以。
$existingKeys = array_keys($array);
//you can use any value instead of null
$newKeys = array_fill_keys(range(min($existingKeys), max($existingKeys)), null);
$array += $newKeys;
//optional, probably not needed
ksort($array);
【讨论】:
你可以尝试从最低索引到最高索引的 for(),如果它是空的,则完成
for($i = 0 ;$i <= 8 ; $i++)
{
//if it's not set
if(!isset($array[$i]))
{
//set to empty
$array[$i] = "";
}
}
此外,您可以先计算数组中元素的数量并将其包装在一个函数中
function completeIndexes($array)
{
$total = count($array);
for($i = 0 ;$i < $total ; $i++)
{
//if it's not set
if(!isset($array[$i]))
{
//set to empty
$array[$i] = "";
}
}
return $array;
}
【讨论】:
for($i=0;i<count($array);++$i){
$array[$i] = isset($array[$i])? $array[$i] : '';
}
不过,它只是用空字符串填充缺失的键。不确定这是否适合您。
编辑
刚刚注意到 Perr0_hunter 在我之前写了几乎相同的东西:P
【讨论】:
如果你想要做的是重新排列数组,那么你得到
Array( [0] => Apple [1] => Orange [2] => Pear [3] => Pear )
只需创建一个新数组并将值复制到其中。它会按顺序分配新的索引
即
$new_array = array();
for( $value in $old_array )
$new_array[] = $value;
【讨论】: