-1

提供したキーに基づいて配列を再帰的に検索する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。さらに説明が必要かどうかお尋ねください。前もって感謝します。

4

3 に答える 3

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

于 2012-08-13T11:06:18.870 に答える
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)
}
于 2012-08-13T13:28:19.740 に答える
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;
}
于 2012-08-13T10:44:27.537 に答える