PHP: получить ключи от независимых массивов

У меня два массива.

Пример первого массива:

 $ arrayOne = массив
 (
     'fruit' => array (
         'apples' => array (),
         'oranges' => array (),
         'bananas' => array ()
     ),
     'vegetable' => массив (
         'tomatoes' => array (),
         'carrots' => array (),
         'celery' => array (),
         'beets' => array
         (
             'bears' => array (),
             'battlestar-galactica' => array ()
         ),
     ),
     'meat' => array (),
     'other' => array ()
 );

второй:

 $ arrayTwo = массив
 (
     'frewt' => массив (
         'aplz' => array (),
         'orangeez' => array (),
         'bunanahs' => array ()
     ),
     'vetchteblz' => массив (
         'toem8ohs' => array (),
         'careodds' => array (),
         'sell-Re' => array (),
         'beats' => array
         (
             'bare z' => array (),
             'tablestar-neglectia' => array ()
         ),
     ),
     'neat' => array (),
     'mother' => array ()
 );

Обратите внимание, что два массива находятся в одном и том же «формате» (одинаковое количество измерений, количество ключей, порядок и т. Д. И т. Д.), Только имена ключей различаются. (Клавиши массива в основном содержат все данные.)

У меня есть несколько переменных, которые адресуют ключи первого массива ( $arrayOne ). Например, $one будет обращаться к первому измерению первого массива, поэтому значение (строка) будет одним из 'fruit' , 'vegetables' , 'meat' или 'other' .
$two'apples' или 'oranges' или 'bananas' или 'tomatoes' или 'carrots' и т. д., вы получите эту идею. (Для каждого измерения есть вары)
Как я уже сказал, эти переменные адресуют только $arrayOne . Тем не менее, я хочу иметь возможность обращаться к клавишам во втором массиве. Смысл, посмотрев на значение $one я хочу получить массив array_key обоих массивов.

 $arrayOne = //... $arrayTwo = //... function getPosition(array $arr, $key) { $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST); $pos = array(); foreach ($it as $k => $v) { if (count($pos) - 1 > $it->getDepth()) { array_pop($pos); $pos[$it->getDepth()]++; } elseif (count($pos) - 1 < $it->getDepth()) { array_push($pos, 0); } else { $pos[$it->getDepth()]++; } if ($k === $key) { return $pos; } } } function getElementKey(array $arr, array $position) { $cur = $arr; $curkey = null; foreach ($position as $p) { reset($cur); for ($i = 0; $i < $p; $i++) { next($cur); } $curkey = key($cur); $cur = current($cur); } return $curkey; } var_dump(getPosition($arrayOne, "battlestar-galactica")); var_dump(getElementKey($arrayTwo, array(1, 3, 1))); 

дает:

 array (3) {
   [0] =>
   INT (1)
   [1] =>
   Int (3)
   [2] =>
   INT (1)
 }
 строка (19) "tablestar-neglectia"

Вы можете getPosition результат getPosition с getElementKey :

 getElementKey($arrayTwo, getPosition($arrayOne, "battlestar-galactica")); 

Проверьте array_keys из обоих массивов, а затем сопоставьте позиции. Как array_keys для ваших массивов даст вам –

 $arrayKeyOne = array('fruit', 'vegetables', 'meat', 'other'); $arrayKeyTwo = array('frewt', 'vetchteblz', 'meat', 'mother'); 

Затем $ arrayKeyTwo [array_search ($ one, $ arrayKeyOne)] shuld дает вам то, что вы хотите. Пусть знают, помогает ли это.