我需要一个php函数,它将根据我提供的密钥递归搜索数组。并希望获得一个数组作为返回输出,其中包含用搜索到的键映射的所有值。
例如:
[Case] => Array
(
[0] => Array
(
[CASE_ID] => 2233
[CHECK_ID] => 57
[CLIENT_ID] => 78
)
[2] => Array
(
[CASE_ID] => 9542
[CHECK_ID] => 45
[CLIENT_ID] => 18
)
)
如果我传递此数组并键CHECK_ID
,那么它应该返回一个包含57,45
的数组。请问您是否需要更多解释。在此先感谢。
答案 0 :(得分:3)
走完阵列并将找到的钥匙放入一个新钥匙:
function find_matches($array, $value) {
$found = array();
array_walk_recursive($array,
function ($item, $key) use ($value, &$found) {
if ($value === $key) {
$found[] = $item;
}
}
);
return $found;
}
请参阅http://codepad.viper-7.com/dVmYOT
您是否还考虑过将find('list')与fields
条件限制一起使用?
答案 1 :(得分:2)
只需检查每个元素,根据键过滤,将结果转换为数组:
$filter = function($c, $key) {
return $key === 'CHECK_ID';
};
$filtered = new CallbackFilterIterator(
new RecursiveIteratorIterator(
new RecursiveArrayIterator($array)
),
$filter
);
var_dump(iterator_to_array($filtered, false));
结果:
array(2) {
[0] =>
int(57)
[1] =>
int(45)
}
答案 2 :(得分:1)
function array_rfind($find, $arr) {
$found = array();
foreach($arr as $key => $val) {
if($key == $find)
$found[] = $val;
elseif(is_array($val))
$found = array_merge($found, array_rfind($find, $val));
}
return $found;
}