Как перебрать многомерный массив с учетом динамического промежуточного ключа?

Ссылка скопирована
1 ответ

Есть массив такого формата:

Array (     [_links] => Array         (             [self] => Array                 .......))      [_embedded] => Array         (             [movement_acceptance] => Array                 (                     [0] => Array                         (                             [id] => 116173                             [state] => confirmed                         )                     [1] => Array                         (                             [id] => 116172                             [state] => new                          )                     [2] => Array                         (                             [id] => 116171                             [state] => confirmed                         )

Array ( [_links] => Array ( [self] => Array .......)) [_embedded] => Array ( [movement_acceptance] => Array ( [0] => Array ( [id] => 116173 [state] => confirmed ) [1] => Array ( [id] => 116172 [state] => new ) [2] => Array ( [id] => 116171 [state] => confirmed )

Мне нужно сделать перебор значений ключа id в группе самых глубоких подмассивов. Получается что выделенный жирным массив постоянно меняется так как является по сути ключем надмассива:
$array[_embedded][movement_acceptance][*][id]

Возвращаясь к задаче - нужно сделать перебор именно значений id со всего списка. Знаю о функции foreach но примеры ее применения показывают только работу со статическими значениями ключей. Значение * может принимать от 0 до 24.

Подскажите как оформить такой перебор?

Дополнительно:

Знаю о функции foreach но примеры ее применения показывают только работу со статическими значениями ключей. Значение * может принимать от 0 до 24.

не правда, foreach - не for

$ids = []; foreach ($array['_embedded']['movement_acceptance'] as $acceptance) {     $ids[] = $acceptance['id']; } var_dump($ids);

$ids = []; foreach ($array['_embedded']['movement_acceptance'] as $acceptance) { $ids[] = $acceptance['id']; } var_dump($ids);

  • Огромное спасибо!
  • array_column
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Для перебора многомерного массива с учетом динамического промежуточного ключа вам нужно использовать рекурсивную функцию. Рекурсия позволяет обходить все уровни вложенности массива и оперировать с ключами динамически.

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

function recursiveArraySearch($array, $searchKey, $dynamicKey) {
    foreach($array as $key => $value) {
        if($key === $searchKey) {
            // Делаем что-то с найденным значением
            echo $value . "<br>";
        } elseif(is_array($value)) {
            // Рекурсивно вызываем функцию для каждого вложенного массива
            recursiveArraySearch($value, $searchKey, $dynamicKey);
        } elseif($key === $dynamicKey) {
            // Делаем что-то с динамическим ключом
            echo $value . "<br>";
        }
    }
}
 
// Пример использования функции
$array = [
    'key1' =&gt; 'value1',
    'key2' =&gt; [
        'subkey1' =&gt; 'subvalue1',
        'subkey2' =&gt; [
            'subsubkey1' =&gt; 'subsubvalue1',
            'subsubkey2' =&gt; 'subsubvalue2'
        ]
    ],
    'key3' =&gt; 'value3'
];
 
recursiveArraySearch($array, 'subsubkey1', 'subkey1');

function recursiveArraySearch($array, $searchKey, $dynamicKey) { foreach($array as $key =&gt; $value) { if($key === $searchKey) { // Делаем что-то с найденным значением echo $value . "<br>"; } elseif(is_array($value)) { // Рекурсивно вызываем функцию для каждого вложенного массива recursiveArraySearch($value, $searchKey, $dynamicKey); } elseif($key === $dynamicKey) { // Делаем что-то с динамическим ключом echo $value . "<br>"; } } } // Пример использования функции $array = [ 'key1' =&gt; 'value1', 'key2' =&gt; [ 'subkey1' =&gt; 'subvalue1', 'subkey2' =&gt; [ 'subsubkey1' =&gt; 'subsubvalue1', 'subsubkey2' =&gt; 'subsubvalue2' ] ], 'key3' =&gt; 'value3' ]; recursiveArraySearch($array, 'subsubkey1', 'subkey1');

В данном примере функция `recursiveArraySearch` принимает три параметра: массив для поиска, ключ для поиска и динамический ключ. Функция рекурсивно обходит массив, и если находит ключ для поиска или динамический ключ, то выполняет определенные действия с найденными значениями.

Вы можете адаптировать этот код под свои нужды, добавив необходимую логику обработки и вывода данных. Надеюсь, этот пример поможет вам решить вашу проблему с перебором многомерного массива с учетом динамического промежуточного ключа.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно