Php 筛选以某些字符开头的数组键
我有一个数组:Php 筛选以某些字符开头的数组键,php,arrays,Php,Arrays,我有一个数组: $persons = [ 'name_1' => 'asfddf', 'name_2' => 'gsdg', 'name_3' => '23423', 'name_aaa' => '123sdg', 'test' => '123sdg', 'other' => '123sdg', 'name_5' => 'sdg2334', ]; 如何从该数组中获取键中具有名称的值 在我的示例中,我希望收到:
$persons = [
'name_1' => 'asfddf',
'name_2' => 'gsdg',
'name_3' => '23423',
'name_aaa' => '123sdg',
'test' => '123sdg',
'other' => '123sdg',
'name_5' => 'sdg2334',
];
如何从该数组中获取键中具有名称的值
在我的示例中,我希望收到:
$persons = [
'name_1' => 'asfddf',
'name_2' => 'gsdg',
'name_3' => '23423',
'name_aaa' => '123sdg',
'name_5' => 'sdg2334',
];
我可以使用foreach
并通过strpos
检查键,但可能是更好的方法?任何map reduce?PHP 5.6及以上版本的解决方案:
Array
(
[name_1] => asfddf
[name_2] => gsdg
[name_3] => 23423
[name_aaa] => 123sdg
[name_5] => sdg2334
)
您可以使用withARRAY\u FILTER\u use\u KEY
标志:
$array = array_filter($persons, function($key) {
return strpos($key, 'name') === 0;
}, ARRAY_FILTER_USE_KEY);
print_r($array);
旧版本的解决方案:
Array
(
[name_1] => asfddf
[name_2] => gsdg
[name_3] => 23423
[name_aaa] => 123sdg
[name_5] => sdg2334
)
这将使用关键点进行比较,然后使用
打印:
Array
(
[name_1] => asfddf
[name_2] => gsdg
[name_3] => 23423
[name_aaa] => 123sdg
[name_5] => sdg2334
)
您可以使用substr
foreach($persons as $key => $value){
if("name_" == substr($key,0,5)){
// process the value
}
}
或者您可以使用preg\u match
foreach($persons as $key => $value){
if (preg_match('/name_/',$key)) {
echo $value;
}
}
foreach
是最简单、可读性最强的方法。为什么要把事情复杂化?如果需要,可以使用withARRAY\u FILTER\u use\u KEY
和回调,但最终这与使用foreach
@xander迭代数组是一样的,但请注意,ARRAY\u FILTER
在回调中使用键,因为php5.6,所以它不适用于旧版本。请注意,在php5.6中添加了第三个参数。@u_mulder也添加了替代解决方案!