Php 如何处理数组,使其在前两个级别上具有关联性,在第三个级别上具有简单值

Php 如何处理数组,使其在前两个级别上具有关联性,在第三个级别上具有简单值,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我试图构造一个数组,其中只有字符串,数组如下所示 键->键->值 为了解释这一点,我在下面附上了两个截图 我从以下几点开始: 在我下面的代码之后,我有90%在那里,但是在第三级的值中有一个数组,而不是简单的值 下面是一些代码: $theme = ThemeHandler::with('sections.settings')->find($activeTheme); $themeSettings = $theme->sections; $themeSetti

我试图构造一个数组,其中只有字符串,数组如下所示 键->键->值

为了解释这一点,我在下面附上了两个截图

我从以下几点开始:

在我下面的代码之后,我有90%在那里,但是在第三级的值中有一个数组,而不是简单的值

下面是一些代码:

    $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);
我想以这种结构结束

键->键->值

而不是

键->键->单个元素\u数组->值

我不确定当我这样做时,如何在底层得到一个数组

return [$item['key'] => $item['value']];
在MapToGroup内部,这是一个函数,可在此处找到:

也许我误解了MapToGroup的工作原理。有人知道如何获得key->key->value结构输出吗?

使用
mapWithKeys()
而不是
mapToGroups()

您得到的是一个数组,而不是期望的简单值,因为该值是一个组,尽管该组只有一个成员

mapToGroups()
使用相同的键对所有值进行分组,但是
mapWithKeys()
将为每个键分配一个值

您可以在集合文档中的示例中看到,生成如下结果:

[
    'Sales' => ['John Doe', 'Jane Doe'],
    'Marketing' => ['Johnny Doe'],
]
[
    'john@example.com' => 'John',
    'jane@example.com' => 'Jane',
]
结果是这样的:

[
    'Sales' => ['John Doe', 'Jane Doe'],
    'Marketing' => ['Johnny Doe'],
]
[
    'john@example.com' => 'John',
    'jane@example.com' => 'Jane',
]

$item['value']
在该点上很可能是一个数组,这就是它返回数组的原因。如果它总是一个单项目数组,您可以执行以下操作:
return[$item['key']=>((is_数组($item['value']))?$item['value'][0]:$item['value'])我知道我的数据,$item['value']是一个简单的值。不知何故,mapToGroup将其转换为数组,并将值作为唯一的项放在其中。这可能会有帮助,嗯,我会尝试一下,你是对的,值以某种方式转换为数组,因为mapToGroup是这样工作的?我成功了,两个嵌套的mapWithKeys实现了这一点,现在在级别之间没有插入额外的数组。你真的帮我省了几个小时的头痛!:)非常感谢!我也摆脱了foreach,两个MapWithKey更优雅。