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