我正在尝试重构我的代码,并删除for循环。
$result = [];
foreach ($data as $language) {
$result[$language->{$key}] = $language->{$column};
}
这成了:
$result = $data->map(function($language) use ($key, $column){
return [$language->{$key} => $language->{$column}];
});
但现在而不是:
[
"key":"value",
"key":"value"
]
我正在
[
{
"key":"value"
},
{
"key":"value"
}
]
为什么它不像数组一样映射?
答案 0 :(得分:2)
请参阅此URL
例如:
$emailLookup = $employees->reduce(function ($emailLookup, $employee) {
$emailLookup[$employee['email']] = $employee['name'];
return $emailLookup;
}, []);
给你的结果如下:
const emailLookup = {
'john@example.com': 'John',
'jane@example.com': 'Jane',
'dave@example.com': 'Dave',
};
在您的情况下,请执行:
$result = $data->reduce(function($language, $a){
$language[$a['any_you_want']] = $a['any_you_want'];
return $language;
}, []);
希望这能帮到你!
答案 1 :(得分:1)
对于您的简单用例,pluck()
是您正在寻找的方法。它将使用现有数组的一列构建新集合。您还可以传入将用于键入新集合的第二个字段。
因此,在您的情况下,您选择的数据列为$column
,而用作新集合的键的列为$key
。你的代码是:
$result = $data->pluck($column, $key);
这表示“向我提供所有$column
数据的集合,并按$key
数据进行关键。”
如果您想要普通数组而不是集合,只需在结果上调用all()
:
$result = $data->pluck($column, $key)->all();
如果您需要“摘取”多列数据,则需要使用已提及的mapWithKeys()
方法。
答案 2 :(得分:1)
您可能需要mapWithKeys
:
$result = $data->mapWithKeys(function($language) use ($key, $column){
return [$language->{$key} => $language->{$column}];
});
自Laravel 5.3以来,该方法已经可用
根据文件:
mapWithKeys
方法遍历集合并将每个值传递给给定的回调。回调应该返回一个包含单个键/值对的关联数组:
答案 3 :(得分:-2)
在循环中,您需要使用键值对
$result = [];
foreach ($data as $key => $language) {
$result[$key] = $language;
}