遍历数组集合并返回命名键值对(Laravel/Eloquent)
Posted
技术标签:
【中文标题】遍历数组集合并返回命名键值对(Laravel/Eloquent)【英文标题】:Loop through a collection of Arrays and return named key value pairs (Laravel/Eloquent) 【发布时间】:2021-07-17 05:44:12 【问题描述】:我正在使用 Laravel,目前我有一个雄辩的 Collection 被返回,其中包含 3 个数组。每个数组中都有嵌套的模型集合。
结构是这样的:
Illuminate\Database\Eloquent\Collection #1905 ▼
#items: array:3 [▼
0 => app\Models\User #1804 ▶
1 => app\Models\User #1805 ▶
2 => app\Models\User #1806 ▶
]
每个用户展开后都是这样
#attributes: array:3 [▼
"user_id" => 12345
"first_name" => "John"
"last_name" => "Doe"]
我想要返回的是一个数组,其中包含所有用户的 user_id => 12345
。
我尝试了传统的foreach
,但索引一直以0 => 12345
而不是user_id
作为我的键返回。我还尝试使用pluck()
提取user_id
,但我得到了与数字key
相同的结果。
有没有使用 eloquent 实现这一目标的有效方法?
【问题讨论】:
使用pluck('user_id')->values()
@KamleshPaul 如果我在我的集合上使用pluck('user_id')->values()
然后添加toArray()
它会返回一个数组但带有数字键。 array:2 [▼ 0 => 12345 1 => 12346 ]
但我希望 0,1
成为 user_id
【参考方案1】:
Pluck 不起作用,因为 user_id
是您正在提取的集合中的值。
为什么不只使用您想要的字段进行选择...而不是从集合中删除您不需要的东西?
例如,这将返回一个数组数组,其中键 id 和值是该 id。
User::select('id')->get()->toArray();
[
[
"id" => 1,
],
[
"id" => 2,
],
]
但要根据您拥有的数据做您想做的事,您可以使用map
并仅返回您需要的键值数据。这是一个简短的例子:
$collection = [
[
"user_id" => 12345,
"first_name" => "John",
"last_name" => "Doe",
],
[
"user_id" => 12346,
"first_name" => "John 2",
"last_name" => "Doe",
],
[
"user_id" => 12347,
"first_name" => "John 3",
"last_name" => "Doe",
],
];
collect($collection)->map(function ($user)
return [
"user_id" => $user["user_id"],
];
);
从一个起始数组记住这种方式,所以在你的情况下,我假设你这样做:
User::get()->map(function ($user)
return [
'user_id' => $user->user_id,
];
);
【讨论】:
以上是关于遍历数组集合并返回命名键值对(Laravel/Eloquent)的主要内容,如果未能解决你的问题,请参考以下文章
将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)