как обработать мой массив, чтобы быть ассоциативным на первых двух уровнях и на третьем, чтобы иметь простое значение - PullRequest
1 голос
/ 19 апреля 2019

Я пытаюсь создать массив, где есть только строки и массив будет выглядеть так кнопочная> кнопочная> значение

Чтобы объяснить это, я прикрепил два скриншота ниже.

Я начну с этого: enter image description here

После моего кода ниже я на 90%, но на третьем уровне есть массив значений вместо простого значения.

enter image description here

Вот код:

    $theme = ThemeHandler::with('sections.settings')->find($activeTheme);
    $themeSettings = $theme->sections;
    $themeSettings = collect($themeSettings->toArray());

    // dd($themeSettings);

    $themeSections = [];
    foreach ($themeSettings as $key => $value) {
        $settings = collect($value['settings']);
        $settings = $settings->mapToGroups(function ($item) {
            return [$item['key'] => $item['value']];
        });
        $themeSections[$value['key']] = $settings->toArray(); 
    }
    dd($themeSections);

Я хотел бы закончить с этой структурой

кнопочная> кнопочной> значения

а не

кнопочная> кнопочная> single_element_array-> значение

Я не уверен, как я получаю массив на нижнем уровне, когда я делаю это

return [$item['key'] => $item['value']];

внутри mapToGroups, которая находится здесь: https://laravel.com/docs/5.8/collections#method-maptogroups

Может быть, я неправильно понимаю, как работают mapToGroups. У кого-нибудь есть идея, как получить вывод key-> key-> value структуры?

1 Ответ

2 голосов
/ 19 апреля 2019

Используйте mapWithKeys() вместо mapToGroups().

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

mapToGroups() группирует все значения с одним и тем же ключом, но mapWithKeys() назначит отдельное значение каждому ключу.

Вы можете увидеть в примерах в документации по сбору mapToGroups() дает такой результат:

[
    'Sales' => ['John Doe', 'Jane Doe'],
    'Marketing' => ['Johnny Doe'],
]

И mapWithKeys() результат такой:

[
    'john@example.com' => 'John',
    'jane@example.com' => 'Jane',
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...