【问题标题】:Remove duplicates in a subarrays删除子数组中的重复项
【发布时间】:2026-02-16 23:05:02
【问题描述】:

我想知道是否有人可以建议如何从具有相同键 color 的项目的子数组中删除重复项目。在下面的示例中,索引 0 的颜色为 redbluegreen,第二个颜色为 redpurplered。我希望在索引级别删除重复项,以便索引 0 的输出应保持redbluegreen 和索引 2 的输出redpurple

$array = [
    [
        ['color' => 'RED'],
        ['color' => 'BLUE'],
        ['color' => 'GREEN']
    ],
    [
        ['color' => 'RED'],
        ['color' => 'PURPLE'],
        ['color' => 'RED']
    ]

];

$new_array = [];
foreach ($array as $item) {
    $new_array[] = array_unique($item);
}

echo json_encode($new_array);

这段代码输出

[[{"color":"RED"}],[{"color":"RED"}]]

因此只需删除相同密钥的重复项。输出需要是:

[[{"color":"RED"},{"color":"BLUE"},{"color":"GREEN"}],[{"color":"RED"},{"color":"PURPLE"}]]

【问题讨论】:

  • 为什么使用'color'索引?所有元素都相似
  • 这只是一个示例,但在进行粗口调用等时将需要进一步进行
  • 你可以像这样设置数组:$array = [ ['RED','BLUE','GREEN'], ['RED','PURPLE','RED'] ]; - 它似乎工作得很好

标签: php arrays multidimensional-array duplicates sub-array


【解决方案1】:

有一种更简单、更优雅的删除重复项的方法,它依赖于 php 数组在同一级别上可能没有重复键这一事实。使用array_column() 分配临时键而不修改子数组的结构,具有重复键的子数组将被清除。删除重复项后,只需调用array_values() 重新索引子数组。我将使用&,以便通过引用修改输入数组——这样就不需要在全局范围内生成新变量。

代码:(Demo)

foreach ($array as &$row) {
    $row = array_values(array_column($row, null, 'color'));
}
var_export($array);

不修改输入数组的代码:(Demo)

$result = [];
foreach ($array as $row) {
    $result[] = array_values(array_column($row, null, 'color'));
}
echo json_encode($result);

【讨论】:

  • 非常感谢,这也很好用