仅获取具有特定键的数组元素

2022-08-30 19:53:35

可能的重复项:
数组键上的模式匹配

我需要获取具有特定键模式的数组中的所有元素。例如,在此数组中:

$items = array(
   "a"         => "1",
   "b"         => "2",
   "special_1" => "3",
   "c"         => "4",
   "special_2" => "5",
   "special_3" => "6",
   "d"         => "7"
);

我需要所有具有包含字符串的键的元素。这些应该定义一个新的数组:special_

$special_items = array(
   "special_1" => "3",
   "special_2" => "5",
   "special_3" => "6",
);

除了循环之外,还有没有聪明的方法?while


答案 1

怎么样?

$special_items = array();

foreach($items as $key => $val) {
    if(substr($key, 0, 8) == 'special_')
        $special_items[$key] = $val;
}

答案 2

首先,您需要获取一个包含密钥的数组。array_keys

然后,您需要过滤键以找到所需的键。array_filter

使用此回调:

function($a) {return substr($a,0,8) == "special_";}

然后翻转数组,使键再次成为键而不是值。array_flip

最后,将这些键与原始数组相交。array_intersect_key

结果:

$special_items = array_intersect_key($items,array_flip(array_filter(array_keys($items),function($a) {return substr($a,0,8) == "special_";})));