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

移除数组重复item_id元素遇阻:array_unique无效问题求助

解决Laravel中按item_id去重关联数组的问题

嘿,我知道你为啥array_unique没生效了——这个函数默认是对比整个数组的完整内容,你例子里的两个子数组虽然item_id相同,但id分别是15710和15711,整个数组的内容不一样,所以array_unique(SORT_REGULAR)会判定它们是不同元素,根本不会去重。

下面给你两种最适合你场景的解决办法:

方法一:用Laravel集合的unique()方法(推荐)

既然你用的是Laravel模型的关联$model->items,这本身就是一个Laravel Collection对象,直接用集合内置的unique()方法就能按指定字段去重,比转数组再处理优雅多了:

// 直接按item_id去重,再转成数组
$test = $model->items->unique('item_id')->toArray();
Debugbar::addMessage($test,'test');

这个方法会保留每个item_id对应的第一个元素,完美符合你的需求。

方法二:纯PHP数组处理(如果一定要用数组操作)

要是你想手动用PHP数组函数实现,也可以借助array_filter或者array_reduce来跟踪已经出现过的item_id:

用array_filter的写法

$itemsArray = $model->items->toArray();
$seenItemIds = [];

$test = array_filter($itemsArray, function($item) use (&$seenItemIds) {
    // 如果当前item_id没出现过,就保留并记录
    if (!in_array($item['item_id'], $seenItemIds)) {
        $seenItemIds[] = $item['item_id'];
        return true;
    }
    return false;
});

Debugbar::addMessage($test,'test');

用array_reduce的写法(更高效)

$itemsArray = $model->items->toArray();

// 用item_id作为键去重,最后重置索引
$test = array_values(array_reduce($itemsArray, function($carry, $item) {
    if (!isset($carry[$item['item_id']])) {
        $carry[$item['item_id']] = $item;
    }
    return $carry;
}, []));

Debugbar::addMessage($test,'test');

内容的提问来源于stack exchange,提问作者biyobojuji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:24:39