У меня два массива.
Пример первого массива:
$ 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 дает вам то, что вы хотите. Пусть знают, помогает ли это.