如何从数组中删除重复项(交换了值)


How to remove duplicate entries (which have swapped values) from an array?

我有一个名为$ 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_ids2_id是否等于下一个数组的s1_ids2_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);

我肯定有一个更优雅的解决方案。

编辑:我删除了条件中的返回。这应该对你有用了。