首页 > 解决方案 > 如何取消设置数组的值?

问题描述

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

$array = array ("something1", "something2", "DEL", ... , "DEL", "DEL", "something else", "something else 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 将我打印出未更改的数组。有什么问题?

标签: phparrays

解决方案


尝试改变:

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

$array = ["sfsff", "DEL", "DEL", "bcbcgh"]; // this is an array

更新:

从您通过电子邮件共享的代码来看,for由于内存问题,它在几千次迭代(在我的情况下为 45K)后打破了循环。原因是您每次迭代都在计算数组的大小,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()因为count()计算数组大小所需的时间更少。

根据一个基准,使用预先计算的变量而不是强制计算每个循环可以快 94%。这可以很快加起来。请参阅同一页上的Counting LoopsFor-loop 测试部分。count()您还可以查看和的情况下的时间差sizeof()

我希望这有帮助。


推荐阅读