You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:15:48