PHP: взорвать и получить ключи многомерного ассоциативного массива - PullRequest
0 голосов
/ 04 августа 2020

У меня небольшая проблема. Я хочу преобразовать это:

$array['page']['article']['header'] = "Header";
$array['page']['article']['body'] = "Body";
$array['page']['article']['footer'] = "Footer";
$array['page']['news']['header'] = "Header";
$array['page']['news']['body'] = "Body";
$array['page']['news']['footer'] = "Footer";

В это:

$array['page.article.header'] = "Header";
$array['page.article.body'] = "Body";
$array['page.article.footer'] = "Footer";
$array['page.news.header'] = "Header";
$array['page.news.body'] = "Body";
$array['page.news.footer'] = "Footer";

Количество измерений является переменным и может быть раз 0 или 10. Я не знаю, использовал ли я правильный поисковый запрос, но Google пока не может мне помочь.

Итак, если у кого-то есть решение для меня. Спасибо

1 Ответ

1 голос
/ 04 августа 2020

Вы можете l oop поверх имеющегося массива. Теперь, если текущее значение является массивом, рекурсивно вызовите этот массив для вызова функции. При каждом вызове функции возвращайте массив с парами значений ключа. Когда вы получаете результат из своего подмассива, прикрепите текущее значение ключа ко всем ключам этого подмассива, возвращенного выходными данными.

Фрагмент:

<?php

function rearrange($array){
    $output = [];
    foreach($array as $key => $val){
        if(is_array($val)){
            $out = rearrange($val);
            foreach($out as $sub_key => $sub_val){
                $output[$key . "." . $sub_key] = $sub_val;
            }
        }else{
            $output[$key] = $val;
        }
    }
    
    return $output;
}

print_r(rearrange($array));

Демо: https://3v4l.org/40hjK

...