PHP |通过重新排序从数组中删除元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP |通过重新排序从数组中删除元素?相关的知识,希望对你有一定的参考价值。

如何删除数组的元素,然后重新排序,而不在数组中有空元素?

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

答案/解决方案:array array_values(array $ input)。

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

将返回一个只包含值的新数组,线性索引。

另一答案

如果你总是删除第一个元素,那么使用array_shift()而不是unset()。

否则,您应该能够使用$ a = array_values($ a)之类的东西。

另一答案

另一种选择是array_splice()。这会重新排序数字键,如果您需要处理足够的数据,这似乎是一种更快的方法。但我喜欢unset()array_values()以提高可读性。

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

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

速度测试:

    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

测试代码:

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
";
        echo $title . " spent " . rutime($ru, $rustart, "stime") .
            " ms in system calls
";
}

$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);
另一答案

如果您只删除数组的第一项,则可以使用array_shift($c);

另一答案

array_shift()移动数组的第一个值并返回它,将数组缩短一个元素并将所有内容向下移动。将修改所有数值数组键以从零开始计数,而不会触及文字键。

array_shift($堆);

例:

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

输出:

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

资料来源:http://php.net/manual/en/function.array-shift.php

另一答案

或者reset();也是一个不错的选择

以上是关于PHP |通过重新排序从数组中删除元素?的主要内容,如果未能解决你的问题,请参考以下文章

php 数组排序以及按照某个字段排序

从排序数组中删除重复项

力扣算法笔记—1_删除排序数组中的重复项(数组)

php数组元素值的修改和删除问题

087-把PHP数组中的元素按随机顺序重新排列shuffle

删除数组中重复的元素