Задать вопрос

Как сконвертировать многомерный ассоциативный массив в одномерный с сохранением пути?

Нужно чтобы работало вот так:

$nestedArray = [
    'firstLevel1' => [
        'secondLevel1' => [
            'thirdLevel1' => 'thirdLevel1 value'
        ],
        'secondLevel2' => 'secondLevel2 value'
    ],
    'firstLevel2' => 'firstLevel2 value'
];

var_export(toPseudoNestedAray($nestedArray));

//array (
//    'firstLevel1[secondLevel1][thirdLevel1]' => 'thirdLevel1 value',
//    'firstLevel1[secondLevel2]' => 'secondLevel2 value',
//    'firstLevel2' => 'firstLevel2 value'
//)


Как такое реализовать?
  • Вопрос задан
  • 391 просмотр
Подписаться 2 Простой Комментировать
Ответ пользователя Посторонним В. К ответам на вопрос (4)
Audiophile
@Audiophile Автор вопроса
Корявая, но реализация

function toPseudoNestedArray(array $array) {
    $result = [];
    $resultingKey = '';
    ($closure = function (array $array) use (&$result, &$resultingKey, &$closure) {
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $currentKey = $resultingKey;
                if ($resultingKey) {
                    $resultingKey .= '[' . $key . ']';
                } else {
                    $resultingKey .= $key;
                }
                $closure($value);
                $resultingKey = $currentKey;
            } else {
                $result[$resultingKey ? $resultingKey . '[' . $key . ']' : $key] = $value;
            }
        }
    })($array);

    return $result;
}


Если есть варианты поизящнее - буду рад другим ответам.
Ответ написан
Комментировать