Поиск рекурсивного массива php – возврат определенного родителя

У меня есть массив, который может меняться по своему размеру, иногда может быть небольшим, иногда может идти глубже. Я пытаюсь найти конкретный элемент в массиве, и если он будет найден, я бы хотел получить конкретный родитель. Так, например, если у меня есть массив как:

Опять же, измерение может измениться, однако, я ищу ключ самого внешнего родителя, у которого есть братья и сестры. ( в данном случае )

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 

Я бы очень признателен за помощь! Благодаря!

Я не совсем уверен, что это то, что вы ищете, но вы можете попробовать:

 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 при запросе функции. Но я думаю, что с ней легче работать, поскольку она написана.

 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