我有一个数组,其中有大约数百万个键。但是其中一些等于“ 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将我打印出未更改的数组。有什么问题吗?
答案 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";
});