PHP | yeniden düzenlenmesiyle diziden öğe kaldırılsın mı?

5 Cevap php

How can I remove an element of an array, and reorder afterwards, without having an empty element in the array?

<?php
   $c = array( 0=>12,1=>32 );
   unset($c[0]); // will distort the array.
?>

Answer / Solution: array array_values ​​(array $ girdi).

<?php
   $c = array( 0=>12,1=>32 );
   unset($c[0]);
   print_r(array_values($c));
   // will print: the array cleared
?>

5 Cevap

array_values($c)

doğrusal endeksli sadece değerler ile yeni bir dizi dönecektir.

Başka bir seçenek array_splice olacaktır. Bu bakım için yeterli veri çatırdayan ise daha hızlı bir yöntem olarak görünmektedir. Ama okunabilmesi için unset () array_values ​​() gibi.

$ Array_splice ($ dizi, $ index, $ num_elements_to_remove);

http://php.net/manual/en/function.array-splice.php

Hız testi:

    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

Test Code:

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

Veya reset(); de iyi bir seçimdir

Her zaman ilk elemanı çıkarıyorsanız, o zaman yerine unset () ve () array_shift kullanın.

Aksi takdirde, $ a = array_values ​​($ a) gibi bir şey kullanmak gerekir.

Yalnızca dizinin ilk öğeyi kaldırırsanız, kullanabilirsiniz array_shift($c);