PHP 陣列 想 保留某些索引值 剩下全部移除

PHP 的陣列裡面,想要保留某些 Key,將其它的全部移除,要怎麼做呢?

  • 註:想要重組 URL 的 Query string 時,很常使用到此功能。

PHP 陣列 想 保留某些特定值 其他全部移除

一個非常直覺的寫法,把不存在的全部 unset() 掉即可,寫法如下:

  1. <?php
  2. function array_allow_keys($array, $allow)
  3. {
  4. if (!is_array($array) || !is_array($allow))
  5. return false;
  6. foreach ($array as $k => $v) {
  7. if (!in_array($k, $allow)) unset($array[$k]);
  8. }
  9. return $array;
  10. }
  11. // USAGE:
  12. // $arr = ['c' => 3, 'sort' => 'id', 'b' => 2, 'tab' => 'home', 'a' => 1];
  13. // $allowed = ['sort', 'tab']; // 要保留的
  14. // print_r(array_allow_keys($arr, $allowed)); // array([sort] => id, [tab] => home)
  15. // or
  16. // array_allow_keys($GET, $allowed); // 直接把 $GET 要的過濾出來
  17. ?>

想要重組 URL 的 Query String,可以使用下述 Function。

  1. <?php
  2. function filter_query_string($query_string, $allowed = [])
  3. {
  4. if (empty($allowed))
  5. return $query_string;
  6. $filtered = [];
  7. if (is_array($allowed) && count($allowed) > 0) {
  8. parse_str($query_string, $url_get);
  9. $filtered = array_allow_keys($url_get, $allowed);
  10. }
  11. return empty($filtered) ? $query_string : http_build_query($filtered);
  12. }
  13. // USAGE:
  14. // print_r(filter_query_string($_SERVER['QUERYSTRING'], $allowed = ['sort', 'tab']));
  15. // print_r(filter_query_string('sort=id&c=3&b=2&tab=home&a=1', $allowed = ['sort', 'tab'])); // sort=id&tab=home
  16. ?>

要將 Array 的 Key 值過濾並保留,下述是使用 array_filter 的寫法:(註:使用上面的即可,下述寫法執行起來的速度比較慢一點)

下述寫法改寫自下述:

  1. <?php
  2. function array_allow_keys($array, $allow)
  3. {
  4. if (!is_array($array) || !is_array($allow))
  5. return false;
  6. return array_filter(
  7. $array,
  8. function ($key) use ($allow) {
  9. return in_array($key, $allow);
  10. },
  11. ARRAY_FILTER_USE_KEY
  12. );
  13. }
  14. ?>

作者: Tsung

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

發表迴響

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