我有一个名为$ clashes的数组,其中包含数组数组。
因此$ clashes的格式为:
$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
]
];
答案 0 :(得分:0)
这是一种相当强力的方法。它会检查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);
我确信有一个更优雅的解决方案。
编辑:我删除了条件中的返回。这应该适合你。