【问题标题】:Remove duplicates pair in an array and also in reverse order PHP Laravel删除数组中的重复对,也以相反的顺序 PHP Laravel
【发布时间】:2016-04-19 15:09:42
【问题描述】:
我有一个数组
array:2 [▼
0 => array:2 [▼
0 => 159
1 => 158
]
1 => array:2 [▼
0 => 159
1 => 158
]
2 => array:2 [▼
0 => 158
1 => 159
]
]
我想以相反的顺序删除重复的和重复的。例如索引 0 和索引 1 具有相同的值 159 and 158 也相同的顺序像 0 => 159 和 1 => 158 。我想删除索引1 或0。既然是一样的。如果你注意到索引2。它具有相同的值唯一的区别是顺序0 => 158 和1 => 159 我也想删除它,因为它是相同的对值。如果该数组是$remove_arr
,我该怎么做
因此,由于我将删除索引2 和索引0 或1,因此应该只剩下一个索引。
【问题讨论】:
标签:
php
arrays
laravel
multidimensional-array
【解决方案1】:
这是一个更简短的解决方案:
$data = [[158, 159], [158, 159], [159, 158]];
$unique = array_unique(array_map(function ($item) {
sort($item); return $item;
}, $data), SORT_REGULAR);
dump($unique); // This will output [[158, 159]]
此解决方案对 2 级数组的内容进行排序。所以排序后,最后一个值也会变成[158, 159],所以array_unique可以正确评估为重复。
【解决方案2】:
count(array_intersect()) 获取数组中相同项目的数量。
当它等于数组长度时,删除其中一个
$remove_arr = [
[158, 159],
[158, 159],
[159, 158]
];
for($i = count($remove_arr)-1; $i >= 0 ; $i--) {
$j = $i-1;
while ($j >= 0) {
if (count(array_intersect($remove_arr[$i],$remove_arr[$j])) == count($remove_arr[$i]))
{ unset($remove_arr[$i]); break; }
else $j--;
}
}
print_r($remove_arr);