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

Как упростить вложенные циклы?

С помощью метода getParsedBody() в Slim3 получаю параметры от multipart/form-data в таком виде:
Countries[0][City]
Нужно привести к такому виду:
Countries[0].City

С помощью вложенных циклов это легко, но как упростить?

foreach ($params as $key => $param) {
    if (!is_array($param)) {
        $data[$key] = $param;
    } else {
        foreach ($param as $key2 => $param2) {
            if (!is_array($param2)) {
                $data[$key . '[' . $key2 . ']'] = $param2;
            } else {
                foreach ($param2 as $key3 => $param3) {
                    if (!is_array($param3)) {
                        $data[$key . '[' . $key2 . '].' . $key3] = $param3;
                    } else {
                        foreach ($param3 as $key4 => $param4) {
                            if (!is_array($param4)) {
                                $data[$key . '[' . $key2 . '].' . $key3 . '[' . $key4 . '].'] = $param4;
                            } else {
                                foreach ($param4 as $key5 => $param5) {
                                    if (!is_array($param5)) {
                                        $data[$key . '[' . $key2 . '].' . $key3 . '[' . $key4 . '].' . $key5] = $param5;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
  • Вопрос задан
  • 137 просмотров
Подписаться 1 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
function arrayCompressor($data, $key = null, &$result = []): array
{
    if (is_array($data)) {
        foreach ($data as $index => $param) {
            if ($key === null) {
                $newKey = $index;
            } else {
                $newKey = $key . '[' . $index . ']';
            }

            arrayCompressor($param, $newKey, $result);
        }
    } else {
        $result[$key] = $data;
    }

    return $result;
}

$array = [
    'RoadServiceAutos' => [
        [
            'RoadServices' => [
                [
                    'CountryAlpha2Code' => 'RU',
                    'CountryBeta2Code' => 'EN',
                ],
            ],
            'Test' => "test",
        ],
    ],
];

print_r(arrayCompressor($array));


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

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽