簡體   English   中英

如何取消設置數組的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM