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() 每次都要從頭再找一次)