包含四个字段的数组的唯一值



我有一个这样的数组:

array(
    0 => array(1, 2, 3, 4),
    1 => array(1, 3, 2, 4),
    2 => array(1, 2, 4, 3),
    3 => array(1, 2, 5, 6)
)

我必须删除重复的记录。所以我最后需要这个数组:

array(
    0 => array(1, 2, 3, 4),
    3 => array(1, 2, 5, 6)
)

脚本是用PHP编写的。

谁能帮忙?:)

这应该可以为您工作:

array_map()sort()遍历每个子数组。然后简单地返回它们implode() 'ed。使用创建的数组,您可以只使用array_unique(),然后再使用explode()的值。

<?php
    $result = array_map(function($v){
        return explode(",", $v);
    }, array_unique(array_map(function($v){
            sort($v);
            return implode(",", $v);
        }, $arr)));
    print_r($result);
?>
输出:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )
    [3] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 5
            [3] => 6
        )
)

另一种方法是

$filter = array();
$result = array_filter($array, function($e) use (&$filter) {
    $sum = array_sum($e);
    $ret = isset($filter[$sum]);
    $filter[$sum] = true;
    return !$ret;
});
演示

这必须是易于理解的

foreach($arr as $key => $value){
    sort($value);
    $arr[$key] = $value;
}
$result = array_unique($arr,SORT_REGULAR);
print_r($result);
输出:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )
    [3] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 5
            [3] => 6
        )
)

最新更新