PHP Array 依照「值」來刪除 Key

PHP 陣列內容的「值(Value)」符合某個字串,就要將此符合的 Key 從陣列刪除(Key + Value 都一起刪除),要怎麼做呢?

PHP Array 依照「值」來刪除 Key

資料準備:先隨機來產生陣列的值

<?php
// $data[$n] 會是 'example' 的字串
$data = [];
$t = rand(1, 98);
for ($i = 0; $i < 100; $i++) {
    if ($i == $t)
        $data[$i] = 'example';
}
// $data[99] = 'example'; // 要測試單值與多值(多值要打開此註解)
?>

使用 foreach 找值

最常見的寫法,直接跑個 foreach 來找出值,再來刪除此 Key

<?php
$del_value = 'example';
foreach ($data as $key => $value) { // 單值的寫法
    if ($value == $del_value) {
        unset($data[$key]);
    }
    break; // 若可以確定此 value 只有一個,break 掉會比較快
}
?>
<?php
$del_value = 'example';
foreach ($data as $key => $value) { // 多值的寫法 (多個 value = 'example' 都要移除)
    if ($value == $del_value) {
        unset($data[$key]);
    }
}
?>

使用 array_search() 來找值

<?php
$del_value = 'example';
if (($key = array_search($del_value, $data)) !== false) { // 單值的寫法
    unset($data[$key]);
}
?>
<?php
$del_value = 'example';
while (($key = array_search($del_value, $data)) !== false) { // 多值的寫法 (多個 value = 'example' 都要移除)
    unset($data[$key]);
}
?>

速度測試比較:

  • 上述寫法單值與多值的寫法速度差異大概 2~3倍(單值寫法快很多)
  • 單值寫法:foreach 與 array_search() 速度差不多
  • 多值寫法:foreach 與 array_search() 速度,foreach 比較快一點 (應該是 array_search() 每次都要從頭再找一次)

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料