【问题标题】:php recursive array search - return specific parentphp递归数组搜索 - 返回特定的父
【发布时间】:2011-03-20 06:17:51
【问题描述】:

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

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

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

非常感谢您的帮助!谢谢!

【问题讨论】:

  • key是什么意思?您期望获得的价值是多少?密钥只是一个像 0 或 1 这样的整数......据我所知,它不会很有用。
  • @konforce:如果我能获得该特定父键的所有子元素,同时保留理想的键。
  • 其实键值会非常有用。获取键值将是理想的,因为我可以将它提供给另一个例程。
  • @Tetsuya,您能否编辑您的问题并添加您想要作为数组转储返回的确切内容(与原始数组的格式相同)以用于HELLO0 和FOO2 的查询?
  • @konforce:我已经更新了帖子。感谢您的帮助!

标签: php arrays recursion


【解决方案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);

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

如果您在查询函数时不想使用list 构造,可以在这两个位置将array($i, $x) 更改为array($i =&gt; $x)。但我认为它更容易使用,因为它是书面的。

【讨论】:

  • 我不太清楚你的确切元素是什么意思?
  • 我把帖子改了一点,也许现在更容易理解了:)
  • @Tetsuya,“复制”我的意思是,如果您要修改返回的 $val,原始的 $data 数组将不会被更改。
  • 正是我想要的。非常感谢!
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 2012-09-16
    • 2014-01-07
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多