我有一个名为$ conflicts的数组,其中包含数字数组。
因此$冲突的格式为:
$clashes = [
[
"s1_id" => 26,
"s2_id" => 27
],
//.......
];
假设我的数组填入数据后是这样的:
$clashes = [
[
"s1_id" => 26,
"s2_id" => 27
],
[
"s1_id" => 27,
"s2_id" => 26
],
[
"s1_id" => 26,
"s2_id" => 27
],
[
"s1_id" => 27,
"s2_id" => 26
]
];
由于这些条目基本上是相同的,那么在数组中至少保留一个条目的同时删除所有重复条目的最佳方法是什么?
编辑:示例输出:
$clashes = [
[
"s1_id" => 26,
"s2_id" => 27
]
];
这是一个蛮力的方法。它检查s1_id
或s2_id
是否等于下一个数组的s1_id
或s2_id
。
function fixYourArray($arr){
for ($i=0; $i<count($arr)+1; $i++){
if ($arr[$i]["s1_id"] == $arr[$i+1]["s1_id"]){
array_pop($arr);
}
if ($arr[$i]["s2_id"] == $arr[$i+1]["s2_id"]){
array_pop($arr);
}
if ($arr[$i]["s1_id"] == $arr[$i+1]["s2_id"]){
array_pop($arr);
}
if ($arr[$i]["s2_id"] == $arr[$i+1]["s1_id"]){
array_pop($arr);
}
}
// else just return
return $arr;
}
print_r($clashes);
$clashes = fixYourArray($clashes);
print('<br />');
print_r($clashes);
我肯定有一个更优雅的解决方案。
编辑:我删除了条件中的返回。这应该对你有用了。