PHP Array 依照「值」來刪除 Key

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

PHP Array 依照「值」來刪除 Key

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

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

使用 foreach 找值

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

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

使用 array_search() 來找值

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

速度測試比較:

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

相關網頁

作者: Tsung

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

發表迴響

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