是否可以搜索数组键?
假设我有以下数组:
$array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c');
我只是想得到这个数组:
$array = array('array_one' => 'a', 'array_two' => 'b');
所以我想用键中包含字符串'array_'的值来获取每个键。
谢谢!
答案 0 :(得分:3)
您可以在键上使用array_filter
然后相交:
$validKeys = array_filter(array_keys($array),
function($key) {
return substr($key, 0, 6) === 'array_';
}
);
$array = array_intersect_key($array, array_flip($validKeys));
答案 1 :(得分:3)
要静态过滤 ,您可以使用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;
}
}
答案 2 :(得分:3)
您可以改用负滤镜:
foreach ($array as $key => $value) {
if (strpos($key, 'array_') !== 0) {
unset($array[$key]);
}
}
请注意,它会就地修改数组。
<强>更新强>
或者,从5.6开始,您现在可以使用array_filter
:
$array = array_filter($array, function($value, $key) {
return strpos($key, 'array_') === 0;
}, ARRAY_FILTER_USE_BOTH);
答案 3 :(得分:1)
我正在考虑foreach
循环:
$search='_array';
foreach ($array as $k => $v) {
if (strpos($a, $search)!==false) echo "$search is in $k!<br />";
}