用于循环和映射的Laravel集合

时间:2017-11-07 07:23:40

标签: php arrays laravel collections

我正在尝试重构我的代码,并删除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"
    }
]

为什么它不像数组一样映射?

4 个答案:

答案 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; }