Otra opción sería array_splice(). Esto reordena las teclas numéricas y parece ser un método más rápido si está procesando datos suficientes para su cuidado. Pero me gusta unset() array_values () para la legibilidad.
array_splice($array, $index, $num_elements_to_remove);
http://php.net/manual/en/function.array-splice.php
Prueba de velocidad:
ArraySplice process used 7468 ms for its computations
ArraySplice spent 918 ms in system calls
UnsetReorder process used 9963 ms for its computations
UnsetReorder spent 31 ms in system calls
Código de prueba:
function rutime($ru, $rus, $index) {
return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000))
- ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000));
}
function time_output($title, $rustart, $ru) {
echo $title . " process used " . rutime($ru, $rustart, "utime") .
" ms for its computations\n";
echo $title . " spent " . rutime($ru, $rustart, "stime") .
" ms in system calls\n";
}
$test = array();
for($i = 0; $i<100000; $i++){
$test[$i] = $i;
}
$rustart = getrusage();
for ($i = 0; $i<1000; $i++){
array_splice($test,90000,1);
}
$ru = getrusage();
time_output('ArraySplice', $rustart, $ru);
unset($test);
$test = array();
for($i = 0; $i<100000; $i++){
$test[$i] = $i;
}
$rustart = getrusage();
for ($i = 0; $i<1000; $i++){
unset($test[90000]);
$test = array_values($test);
}
$ru = getrusage();
time_output('UnsetReorder', $rustart, $ru);
'reset();' no es, según PHP.net: "reset() rebobina array ' s puntero interno al primer elemento y devuelve el valor del primer elemento de la matriz ". – Harmen
Ok Gracias, de hecho por su voto – streetparade