PHP | Remove element from array with reordering?

╄→尐↘猪︶ㄣ 提交于 2019-12-04 03:44:30
array_values($c)

will return a new array with just the values, indexed linearly.

If you are always removing the first element, then use array_shift() instead of unset().

Otherwise, you should be able to use something like $a = array_values($a).

Allen Oliver

Another option would be array_splice(). This reorders numeric keys and appears to be a faster method if you are crunching enough data to care. But I like unset() array_values() for readability.

array_splice( $array, $index, $num_elements_to_remove);

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

Speed test:

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

If you only remove the first item of the array, you could use array_shift($c);

array_shift() shifts the first value of the array off and returns it, shortening the array by one element and moving everything down. All numerical array keys will be modified to start counting from zero while literal keys won't be touched.

array_shift($stack);

example:

$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);

Output:

Array
(
    [0] => banana
    [1] => apple
    [2] => raspberry
)

Source: http://php.net/manual/en/function.array-shift.php

$array=["one"=>1,"two"=>2,"three"=>3];
$newArray=array_shift($array);

return array_values($newArray);

return [2,3] array_shift remove first element from an array array_values return just values

Or reset(); is also a good choice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!