在array-PHP中搜索部分键

在array-PHP中搜索部分键,php,arrays,search,Php,Arrays,Search,是否可以搜索数组键 假设我有以下数组: $array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c'); 我只想得到这个数组: $array = array('array_one' => 'a', 'array_two' => 'b'); 因此,我想获取每个键,其值包含键中的字符串“array” 谢谢 我正在考虑一个foreach循环: $search='_array'; foreac

是否可以搜索数组键

假设我有以下数组:

$array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c');
我只想得到这个数组:

$array = array('array_one' => 'a', 'array_two' => 'b');
因此,我想获取每个键,其值包含键中的字符串“array”


谢谢

我正在考虑一个
foreach
循环:

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

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

} 
$search=''数组';
foreach($k=>v的数组){
如果(strpos($a,$search)!==false)回显“$search在$k!
”; }
您可以在键上使用
阵列过滤器
,然后相交:

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

$array = array_intersect_key($array, array_flip($validKeys));
要进行静态筛选,可以使用:

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

$filtered = array();

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

您可以改为使用负过滤器:

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

请注意,它会就地修改阵列

更新

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


恐怕您必须使用foreach循环并查找键值。
preg_grep()
可能会有所帮助,但您最好在构建阵列时对其进行重新构造,使其更适合您想要使用的方式。效率不高。。。在原始数组(不需要)上循环,只是为了创建一个新的键数组(不需要),再加上交叉点…@Gremo:你说得对,如果性能在这里成为一个问题(大型数组),一个foreach将改善它。
foreach ($array as $key => $value) {
    if (strpos($key, 'array_') !== 0) {
        unset($array[$key]);
    }
}
$array = array_filter($array, function($value, $key) {
    return strpos($key, 'array_') === 0;
}, ARRAY_FILTER_USE_BOTH);