2009-04-08 3 views

ответ

3

Это должно быть быстрее для больших массивов. Для меньших массивов будет выполняться любой метод.

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

Если то, что вы пытаетесь сделать, это изменить порядок массива, так что вы получите

Array([0] => Apple [1] => Orange [2] => Pear [3] => Pear) 

Просто создать новый массив и скопировать значения в него. Он будет выделять новые индексы последовательно

т.е.

$new_array = array(); 
for($value in $old_array) 
    $new_array[] = $value; 
+0

использовать array_Values ​​() вместо вашего цикла for – OIS

1

вы могли бы попробовать для() от самого низкого показателя с самым высоким и полным, если он пустой

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; 
    } 
1
for($i=0;i<count($array);++$i){ 
    $array[$i] = isset($array[$i])? $array[$i] : ''; 
} 

Он просто заполняет недостающие ключи пустой строкой. Не уверен, что это вам подходит.

Редактировать

Просто заметил Perr0_hunter писал почти то же самое, прежде чем я сделал: P

Смежные вопросы