具有四个字段的数组的唯一值

时间:2015-05-29 10:46:15

标签: php arrays unique

我有一个这样的数组:

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格式。

谁可以提供帮助? :)

3 个答案:

答案 0 :(得分:2)

这应该适合你:

只需通过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
        )

)

答案 1 :(得分:0)

另一种方法是

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

    return !$ret;
});

Demo

答案 2 :(得分:0)

这一定是易于理解的

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
        )

)

DEMO