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