如何从PHP关联数组中提取pivot内的milestone_id值?
问题描述
通过Eloquent查询得到Laravel集合,调用toArray()转成数组后结构如下:
Array ( [0] => Array ( [id] => 1 [details] => routes [level] => beginner [created_at] => 2022-11-16T11:09:48.000000Z [updated_at] => 2022-11-09T11:09:48.000000Z [pivot] => Array ( [user_id] => 1 [milestone_id] => 1 ) ) [1] => Array ( [id] => 2 [details] => router 2 [level] => beginner [created_at] => 2022-11-09T11:09:48.000000Z [updated_at] => 2022-11-18T11:09:48.000000Z [pivot] => Array ( [user_id] => 1 [milestone_id] => 2 ) ) [2] => Array ( [id] => 3 [details] => route [level] => route 3 [created_at] => 2022-11-15T09:05:46.000000Z [updated_at] => 2022-11-17T09:05:46.000000Z [pivot] => Array ( [user_id] => 1 [milestone_id] => 3 ) ) )
需要提取所有pivot中的milestone_id,得到[1,2,3]的结果。
解决方案
方法一:直接操作Laravel集合(推荐)
不需要先转成数组,Laravel集合自带的pluck方法支持嵌套属性提取,一步到位:
$milestoneIds = $collection->pluck('pivot.milestone_id')->toArray();
pluck('pivot.milestone_id')会直接遍历集合中的每个模型,取出pivot关联对象里的milestone_id,最后调用toArray()转成目标数组。
方法二:对已转换的数组处理
如果已经把集合转成了数组,可用以下两种PHP原生方法:
1. 使用array_column
array_column支持指定嵌套的键路径(PHP 7.0+):
$milestoneIds = array_column($array, 'milestone_id', null, 'pivot');
第四个参数'pivot'指定先定位到每个子数组的pivot键,再提取其中的milestone_id。
2. 使用array_map
通过匿名函数遍历数组,逐个提取目标值:
$milestoneIds = array_map(function($item) { return $item['pivot']['milestone_id']; }, $array);
或者用PHP 7.4+的短闭包写法更简洁:
$milestoneIds = array_map(fn($item) => $item['pivot']['milestone_id'], $array);
内容的提问来源于stack exchange,提问作者Pasindu Ruwandeniya
相关产品推荐
相关产品推荐

