如何取消设置数组的值?

时间:2019-03-07 23:35:16

标签: php arrays

我有一个数组,其中有大约数百万个键。但是其中一些等于“ DEL”,我想取消设置:

$ array = array(“ something1”,“ something2”,“ DEL”,...,“ DEL”,“ DEL”,“ something”,“ something n”);

我想从数组中用“ DEL”取消设置这些键,但是这可能是错误的,它不会从数组中删除这些值。有什么问题吗?

代码如下:

 <?php
    $array = {"sfsff", "DEL", ... "DEL", "bcbcgh"};

    for ($i=0; $i<sizeof($array); $i++)
    {
         if ($array[$i] == "DEL")
         {
              unset($array[$i]);
         }
    }

    var_dump($array);
?>

在这里,var dump将我打印出未更改的数组。有什么问题吗?

2 个答案:

答案 0 :(得分:1)

尝试更改:

(a)

$array = {"sfsff", "DEL", "DEL", "bcbcgh"}; // Invalid array input

更新:

在您通过电子邮件共享的代码中,由于内存问题,它在经过数千次迭代(本例中为45K)后中断了$array = ["sfsff", "DEL", "DEL", "bcbcgh"]; // this is an array 循环。原因是您要在每次迭代for中计算数组的大小,而这在处理循环时根本不是一个好的解决方案。您需要将代码更改为:

for ($i=0; $i < sizeof($array); $i++)

在这里,我们的$length = count($newarray); // calculate the count first and then use it in the loop. for ($i=0; $i < $length; $i++) { if ($newarray[$i] == "DEL") { unset($newarray[$i]); } } 变量保存着数组的大小,所以我们不必让我们的应用程序每次循环时都要检查长度/计数。另外,我使用$length代替了count(),因为sizeof()花费更少的时间来计算数组的大小。

  

根据one benchmark,使用预先计算的变量而不是   强制每个循环的计数速度可以提高94%。可以快速添加   起来请参阅同一页上的计数循环进行循环测试。您还可以看到在count()count()的情况下所花费的时间。

我希望这会有所帮助。

答案 1 :(得分:0)

array_filter(["sfsff", "DEL", "DEL", "bcbcgh"],function($value) {
    return $value != "DEL";
});