如何从数组中删除重复的条目(具有交换的值)?

时间:2015-05-30 16:15:58

标签: php arrays sorting logic

我有一个名为$ 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
    ]
];

1 个答案:

答案 0 :(得分:0)

这是一种相当强力的方法。它会检查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);

我确信有一个更优雅的解决方案。

编辑:我删除了条件中的返回。这应该适合你。