过滤以某些字符开头的数组键

时间:2017-08-03 06:46:08

标签: php arrays

我有阵列:

$persons = [
   'name_1' => 'asfddf',
   'name_2' => 'gsdg',
   'name_3' => '23423',
   'name_aaa' => '123sdg',
   'test' => '123sdg',
   'other' => '123sdg',
   'name_5' => 'sdg2334',
];

如何从键中获得name

的数组中获取值

在我的例子中,我希望收到:

$persons = [
   'name_1' => 'asfddf',
   'name_2' => 'gsdg',
   'name_3' => '23423',
   'name_aaa' => '123sdg',
   'name_5' => 'sdg2334',
];

我可以使用foreach并按strpos检查密钥,但也许更好的方法呢?任何地图减少?

2 个答案:

答案 0 :(得分:3)

PHP 5.6及其解决方案以上:

您可以将array_filterARRAY_FILTER_USE_KEY标志一起使用:

$array = array_filter($persons, function($key) {
    return strpos($key, 'name') === 0;
}, ARRAY_FILTER_USE_KEY);

print_r($array);

旧版本的解决方案:

这使用密钥进行比较,然后使用array_intersect_key

应用密钥交集
$array = array_filter(array_keys($persons), function($key) {
    return strpos($key, 'name') === 0;
});

print_r(array_intersect_key($persons, array_flip($array)));

<强>打印

Array
(
    [name_1] => asfddf
    [name_2] => gsdg
    [name_3] => 23423
    [name_aaa] => 123sdg
    [name_5] => sdg2334
)

答案 1 :(得分:0)

您可以使用substr

尝试此操作
foreach($persons as $key => $value){
    if("name_" == substr($key,0,5)){
    // process the value
     }
 }

或者您可以使用preg_match

执行此操作
foreach($persons as $key => $value){
    if (preg_match('/name_/',$key)) {
        echo $value;
    }
}