删除子数组中的重复项

Remove duplicates in a subarrays

我想知道是否有人可以就如何从具有相同键 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"}]]

有一种更简单、更优雅的方法来删除重复项,它依赖于 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);