基于php中的键递归搜索数组

时间:2012-08-13 10:40:06

标签: php regex arrays cakephp

我需要一个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的数组。请问您是否需要更多解释。在此先感谢。

3 个答案:

答案 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;
}