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

如何基于单列对二维数组实现类似array_unique()的去重功能

用PHP内置函数给二维数组按指定列去重

先看你给出的输入数组:

[
    ['foo' => 1, 'bar' => 2],
    ['foo' => 1, 'bar' => 3],
    ['foo' => 2, 'bar' => 4]
]

不用写循环,靠内置函数组合就能搞定按foo列去重,给你两种实用方法:

方法一:array_column + array_values 快速实现

array_column有个实用特性——第三个参数可以把指定列的值作为新数组的键。因为数组键不能重复,重复的键会自动覆盖,正好用来去重。之后用array_values把关联数组转成连续索引数组即可:

$original = [
    ['foo' => 1, 'bar' => 2],
    ['foo' => 1, 'bar' => 3],
    ['foo' => 2, 'bar' => 4]
];

// 用foo的值当键,原数组元素当值,重复键直接覆盖
$uniqueArr = array_column($original, null, 'foo');
// 重置索引为连续数字
$uniqueArr = array_values($uniqueArr);

print_r($uniqueArr);

输出会保留最后一个重复的foo=1项:

[
    ['foo' => 1, 'bar' => 3],
    ['foo' => 2, 'bar' => 4]
]

要是想保留第一个重复项,先反转原数组,处理完再反转回来就行:

$uniqueArr = array_column(array_reverse($original), null, 'foo');
$uniqueArr = array_reverse(array_values($uniqueArr));

方法二:array_reduce 自定义控制

用array_reduce遍历数组,能自己灵活控制是否添加元素:

$uniqueArr = array_reduce($original, function($result, $item) {
    // 只有foo值没出现过才添加,保留第一个重复项
    if (!isset($result[$item['foo']])) {
        $result[$item['foo']] = $item;
    }
    return $result;
}, []);

$uniqueArr = array_values($uniqueArr);

要是想保留最后一个重复项,去掉!isset判断即可,后面的元素会直接覆盖前面的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:18