Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 筛选以某些字符开头的数组键_Php_Arrays - Fatal编程技术网

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
)
您可以使用with
ARRAY\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
是最简单、可读性最强的方法。为什么要把事情复杂化?如果需要,可以使用with
ARRAY\u FILTER\u use\u KEY
和回调,但最终这与使用
foreach
@xander迭代数组是一样的,但请注意,
ARRAY\u FILTER
在回调中使用键,因为php5.6,所以它不适用于旧版本。请注意,在php5.6中添加了第三个参数。@u_mulder也添加了替代解决方案!