在数组中搜索键的一部分- PHP

a11xaf1n  于 2023-06-20  发布在  PHP
关注(0)|答案(4)|浏览(92)

可以搜索数组键吗?
假设我有以下数组:

$array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c');

我只想得到这个数组:

$array = array('array_one' => 'a', 'array_two' => 'b');

所以我想获取每个键,其值包含 key 中的字符串'array_'。
谢谢!

yzckvree

yzckvree1#

您可以使用负过滤器(使用strpos):

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

Demo
请注意,它会就地修改数组。

更新

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

$array = array_filter($array, function($value, $key) {
    return strpos($key, 'array_') === 0;
}, ARRAY_FILTER_USE_BOTH);
v8wbuo2f

v8wbuo2f2#

你可以在键上使用array_filter,然后相交:

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

$array = array_intersect_key($array, array_flip($validKeys));
0g0grzrc

0g0grzrc3#

要进行 * 静态 * 过滤,可以使用array_intersect_key

$allowed = array('foo', 'bar');
$filtered = array_intersect_key($array, array_flip($allowed));

在你的例子中,我认为你需要循环:

$filtered = array();

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

2fjabf4q4#

下面是一个foreach循环:

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

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

}

相关问题