php递归数组搜索 - 返回特定父级

时间:2011-03-20 06:17:52

标签: php arrays recursion

我有一个可以在其维度上变化的数组,有时可以很小,有时可以更深入。我正在尝试搜索数组中的特定元素,如果找到它,我想获得一个特定的父元素。例如,如果我有一个数组:

同样,维度可以改变,但是,我正在寻找拥有兄弟姐妹的最外层父母的在这种情况下

Array (
  [0] => Array (
    [0] => Array (              
        [0] => Array (         <<----------------------------------------+
              [0] => FOO0                                                |  
              [1] => BAR0         //Search BAR0 returns parent key 0     +
              [2] => Array(                                              |
                    [0] => HELLO0                                        |
                    [1] => BYE0   //Search BYE0 returns parent key 0     +
                  )                                                      |
              [3] => FOO0                                                |
              [4] => Array (                                             |
                    [0] => HELLO0  //Search HELLO0 returns parent key 0 --
                  )
            )
        [1] => Array (         <<----------------------------------------+
              [0] => FOO1                                                |
              [1] => BAR1                                                |
              [2] => Array (                                             |
                    [0] => HELLO1                                        |
                    [1] => BYE1                                          |
                  )                                                      |
              [3] => BASE1                                               |
              [4] => Array (                                             |
                    [0] => BAZ1                                          |
                    [1] => Array (                                       | 
                          [0] => DOO1 //Search DOO1 returns parent key 1 +
                          [1] => BOB2 //Search BOB2 returns parent key 1 +
                        )
                )
          )
        [2] => FOO2 // Search FOO2 returns key 2 (itself)
        )
    )
)

FOO2的样本输出

[2] => FOO2 // searched value

我真的很感激一些帮助!谢谢!

2 个答案:

答案 0 :(得分:1)

我不完全确定这是你在找什么,但你可以尝试一下:

function find($needle, array $haystack)
{
  foreach ($haystack as $i => $x) {
    if (is_array($x)) {
      $b = find($needle, $x);
      if ($b) return count($haystack) > 1 ? array($i, $x) : $b;
    }
    else if ($x == $needle) {
      return array($i, $x);
    }
  }

  return false;
}

list($key, $val) = find('FOO1', $data);

这不会返回确切的元素,而是它的副本。如果您想要原始项目,则需要更新它以使用参考。

如果您在查询函数时不想使用array($i, $x)构造,则可以在这两个位置将array($i => $x)更改为list。但我认为在编写时更容易使用。

答案 1 :(得分:0)

function recursive_array_search($k,$h) {
    foreach($h as $key=>$v) if($k===$v OR (is_array($v) && recursive_array_search($k,$v) !== false)) return $key;
    return false;
}

用法:

echo recursive_array_search($searchThis, $InThisArray);

现在你只需修改它就可以返回任何你想要的东西。

来源:php.net