删除子数组中的重复项
Remove duplicates in a subarrays
我想知道是否有人可以就如何从具有相同键 color
的项的子数组中删除重复项提出建议。从下面的示例中,索引 0 具有颜色 red
、blue
和 green
,第二个具有 red
、purple
、red
。我希望在索引级别删除重复项,以便索引 0 的输出应保持 red
、blue
、green
和索引 2 的输出 red
、purple
.
$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);
我想知道是否有人可以就如何从具有相同键 color
的项的子数组中删除重复项提出建议。从下面的示例中,索引 0 具有颜色 red
、blue
和 green
,第二个具有 red
、purple
、red
。我希望在索引级别删除重复项,以便索引 0 的输出应保持 red
、blue
、green
和索引 2 的输出 red
、purple
.
$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);