[英]How to unset value of array?
我有一個數組,其中有大約數百萬個鍵。 但是其中一些等於“ DEL”,我想取消設置:
$ array = array(“ something1”,“ something2”,“ DEL”,...,“ DEL”,“ DEL”,“其他”,“其他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將我打印出未更改的數組。 有什么問題?
嘗試更改:
$array = {"sfsff", "DEL", "DEL", "bcbcgh"}; // Invalid array input
至
$array = ["sfsff", "DEL", "DEL", "bcbcgh"]; // this is an array
從您通過電子郵件共享的代碼中,由於內存問題,它在經過數千次迭代(本例中為45K)后中斷了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()
因為count()
花費較少的時間來計算數組的大小。
根據一個基准 ,使用預計算的變量而不是強制計數,每個循環可以快94%。 那可以很快加起來。 請參閱同一頁上的“ 計數循環的循環測試”部分。 您還可以看到在
count()
和sizeof()
情況下所花費的時間差。
我希望這有幫助。
array_filter(["sfsff", "DEL", "DEL", "bcbcgh"],function($value) {
return $value != "DEL";
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.