【问题标题】:Search for part of an key in array - PHP在数组中搜索键的一部分 - PHP
【发布时间】:2013-02-14 20:43:49
【问题描述】:

是否可以搜索数组键?

假设我有以下数组:

$array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c');

而我只想得到这个数组:

$array = array('array_one' => 'a', 'array_two' => 'b');

所以我想获取每个键,其值包含 key 中的字符串 'array_'。

谢谢!

【问题讨论】:

  • 恐怕你必须用foreach循环并寻找关键值。

标签: php arrays search


【解决方案1】:

我正在考虑一个foreach 循环:

$search='_array';
foreach ($array as $k => $v) {

    if (strpos($a, $search)!==false) echo "$search is in $k!<br />";

} 

【讨论】:

    【解决方案2】:

    你可以在键上使用array_filter然后相交:

    $validKeys = array_filter(array_keys($array),
        function($key) {
            return substr($key, 0, 6) === 'array_';
        }
    );
    
    $array = array_intersect_key($array, array_flip($validKeys));
    

    【讨论】:

    • 效率不高...对原始数组进行循环(不需要)只是为了创建一个新的键数组(不需要),加上交集...
    • @Gremo:你说得对,应该性能在这里成为一个问题(大型数组),单个 foreach 将改善它。
    【解决方案3】:

    要过滤静态,你可以使用array_intersect_key:

    $allowed = array('foo', 'bar');
    $filtered = array_intersect_key($array, array_flip($allowed));
    

    在你的情况下,我认为你需要循环:

    $filtered = array();
    
    foreach($array as $key => $val) {
        if(false !== strpos($key, 'array_')) {
            $filtered[$key] = $val;
        }
    }
    

    【讨论】:

      【解决方案4】:

      您可以改用否定过滤器:

      foreach ($array as $key => $value) {
          if (strpos($key, 'array_') !== 0) {
              unset($array[$key]);
          }
      }
      

      Demo

      请注意,它会就地修改数组。

      更新

      或者,从 5.6 开始,您现在可以使用 array_filter

      $array = array_filter($array, function($value, $key) {
          return strpos($key, 'array_') === 0;
      }, ARRAY_FILTER_USE_BOTH);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2012-03-03
        • 2011-06-22
        • 1970-01-01
        • 2014-09-07
        相关资源
        最近更新 更多