"a1", "b-6ren">
gpt4 book ai didi

Laravel 集合 - 列出多个值

转载 作者:行者123 更新时间:2023-12-02 05:41:05 27 4
gpt4 key购买 nike

我希望获取一个集合并返回包含集合中两个字段的平面数组。我想要什么:

$collection = new Collection([
[
"a"=>"a1",
"b"=>"b1",
"c"=>"c1"
],
[
"a"=>"a2",
"b"=>"b2",
"c"=>"c2"
],
[
"a"=>"a3",
"b"=>"b3",
"c"=>"c3"
]
]);

//desired output:
[
["a1","b1"],
["a2","b2"],
["a3","b3"]
];

我会认为这是一个函数,但它不是:

$collection->lists(["a","b"]);

鉴于这些可能有数千行,我当前的解决方案似乎不是很有效:

$collection->lists("a")->zip($collection->lists("b"));

我缺少某个功能吗?谢谢。

编辑:我也像这样使用过 map :

$collection->map(function($row)){
return [$row['a'],$row['b']];
}

这似乎比我想要的要自定义一些。如果没有本地方式,我可能最终会使用此函数为 Collection 编写一个包装器..

最佳答案

如果您想专门使用集合,您可以扩展当前的集合 API,因为它是可宏化的,执行如下操作:

Collection::macro('pluckMultiple', function ($assoc) {
return $this->map(function ($item) use ($assoc) {
$list = [];
foreach ($assoc as $key) {
$list[$key] = data_get($item, $key);
}
return $list;
}, new static);
});

在上面的示例中,我将 key 作为返回的一部分,但可以删除。

$collection->pluckMultiple(['a', 'b']);

会给你你正在寻找的东西。

如果你想从 Eloquent 集合中提取项目,上面的代码可以很好地工作,例如:

$books = Book::with('author')->get();
$books->pluckMultiple(['title', 'author.name', 'author.surname']);

关于Laravel 集合 - 列出多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35948737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com