【问题标题】:Laravel collection for loops and mappings用于循环和映射的 Laravel 集合
【发布时间】:2018-04-19 12:16:34
【问题描述】:

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

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

【问题讨论】:

  • 你所期望的是错误的格式,也分享一些示例数据,和现场演示?
  • 请参考这个:adamwathan.me/2016/07/14/…希望这对你有帮助!
  • @Norgul 我已经发布了我的答案,请查看!

标签: php arrays laravel collections


【解决方案1】:

在循环中你需要用作键值对

$result = []; foreach ($data as $key => $language) { $result[$key] = $language; }

【讨论】:

    【解决方案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;
    }, []);
    

    希望对你有帮助!

    【讨论】:

      【解决方案3】:

      对于您的简单用例,pluck() 是您正在寻找的方法。它将使用现有数组的一列构建一个新集合。您还可以传入第二个字段,该字段将用于作为新集合的键。

      因此,在您的情况下,您选择的数据列是 $column,而用作新集合键的列是 $key。你的代码是:

      $result = $data->pluck($column, $key);
      

      这表示“给我一个所有$column 数据的集合,并以$key 数据作为键”。

      如果您想要普通数组而不是集合,只需在结果上调用all()

      $result = $data->pluck($column, $key)->all();
      

      如果您需要“提取”多列数据,则需要使用前面提到的mapWithKeys() 方法。

      【讨论】:

        【解决方案4】:

        你可能需要mapWithKeys:

        $result = $data->mapWithKeys(function($language) use ($key, $column){
            return [$language->{$key} => $language->{$column}];
        });
        

        该方法从 Laravel 5.3 开始可用

        根据文档:

        mapWithKeys 方法遍历集合并将每个值传递给给定的回调。回调应该返回一个包含单个键/值对的关联数组:

        【讨论】:

          猜你喜欢
          • 2015-10-01
          • 2014-01-10
          • 1970-01-01
          • 2012-09-25
          • 1970-01-01
          • 2019-01-24
          • 1970-01-01
          • 1970-01-01
          • 2018-06-16
          相关资源
          最近更新 更多