PHP Как искать в многомерном массиве ключ из другого многомерного массива, помня родительский ключ

Я пытаюсь найти значение ключа в многомерном массиве при сопоставлении родительского ключа тоже.

Например:

Массив 1 — Массив ключей, которые я пытаюсь найти в значении.

$array1 = array(
'title',
'metadata' => array('size', 'mime'),
'dates' => array('published' =>
array('firstedition' => '12/22/22',
'secondedition' => '22/22/22',
'thirdedition'),
'description',
'mime'
);

Массив 2: Массив, который я ищу для ключей в массиве 1

$array2 = array(
'title' => 'hello',
'metadata' => array('size' => '22', 'mime' => 'text/html'),
'dates' => array('published' =>
array('firstedition' => '12/22/22',
'secondedition' => '22/22/22',
'thirdedition' => '22/22/14'),
'type' => 'book',
'description' => 'This is a description',
'mime' => 'something/pdf',
'firstedition' => '99/99/99'
);

Все значения в массиве 1 — это ключи, которые я хочу найти в массиве 2. Если значение в массиве 1 является массивом, я хочу найти значение в массиве 2, соответствующее значениям родителей.

Например:

Массив 1:
Метаданные -> Размер

Поиск по массиву 2 возвращает:
22


Массив 1:
Метаданные -> Мим

Поиск по массиву 2 возвращает:
текст / html


Массив 1:
мим

Поиск по массиву 2 возвращает:
что-то / pdft


Массив 1:
даты -> опубликовано -> первый

Массив 2 возвращает:

12/22/22

Массив 1:
первое издание

Массив 2 возвращает:
99/99/99

Обратите внимание на разницу результатов между «даты -> опубликованные -> первые» и просто «первые». Поэтому я хочу найти все значения в массиве 1 как ключи, чтобы найти их в массиве 2 и отобразить их следующим образом:

ключ -> возможная подпункт -> возможная подпункт: значение

Если возможно, вернуть массив с путем ключа и значением, например:

    array('dates\published\firstedition', '12/22/22');
array('firstedition', '99/99/99');

Кроме того, Array1 является частью большего массива, с разными типами файлов, array1 находится под ключом «books», а в array2 — ключ «type», поэтому в зависимости от того, какой тип array2 — значения из ключей, которые я хочу получить в массив2 может отличаться. Например, в array1 также могут быть «песни», для которых мне нужен другой набор значений, например, «битрейт», но я не хочу искать «firstedition», потому что он не существует.

Я опубликовал этот пример, так как мне уже удалось определить, что такое массив array2, и найти соответствующий ключ, который выводит то, что я опубликовал как array1.

Любая помощь будет принята с благодарностью и не может обойти меня.

0

Решение

Мне удалось сделать это путем сжатия массива в пути с помощью этой функции:

public static function convertToPaths($myArray)
{
$ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray));
$result = array();
foreach ($ritit as $leafValue) {
$keys = array();
foreach (range(0, $ritit->getDepth()) as $depth) {
$keys[] = $ritit->getSubIterator($depth)->key();
}
$result[ join('.', $keys) ] = $leafValue;
}
return $result;
}

Который возвращает массив и значения в виде путей, таких как «date.published.firstedition» — тогда я смог получить доступ к информации и проверить, существует ли она, используя функцию in array.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector