1

我有一个这样的数组

Array
(
    [0] => u1,u2
    [1] => u2,u1
    [2] => u4,u3
    [3] => u1,u3
    [4] => u1,u2
)

我想从数组中删除类似的值我想要一个输出

Array
    (
        [0] => u1,u2
        [1] => u4,u3
        [2] => u1,u3

    )

我尝试遍历输入数组,按字母顺序对索引的值进行排序,然后尝试使用 array_search 来查找重复的值。但从来没有真正得到想要的输出

任何帮助表示赞赏

4

5 回答 5

3

您不能array_unique()单独使用,因为这只会匹配完全重复的内容。因此,您必须循环并检查该值的每个排列。

您可以使用array_unique()开始,然后循环:

$myArray = array('u1,u2', 'u2,u1', 'u4,u3', 'u1,u3', 'u1,u2');

$newArr = array_unique($myArray);
$holderArr = array();

foreach($newArr as $val)
{
    $parts = explode(',', $val);
    $part1 = $parts[0].','.$parts[1];
    $part2 = $parts[1].','.$parts[0];

    if(!in_array($part1, $holderArr) && !in_array($part2, $holderArr))
    {
        $holderArr[] = $val;
    }
}

$newArr = $holderArr;

上面的代码将产生以下输出:

Array ( 
    [0] => u1,u2 
    [1] => u4,u3 
    [2] => u1,u3 
)
于 2013-08-27T10:48:25.950 回答
0

使用array_unique()PHP 函数:

http://php.net/manual/en/function.array-unique.php

于 2013-08-27T10:36:28.910 回答
0

使用功能array_unique($array)

于 2013-08-27T10:36:31.783 回答
0
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

php手册

于 2013-08-27T10:36:56.087 回答
0

因为 u1,u2 !== u2,u1

    $array=array('u1,u2','u2,u1','u4,u3','u1,u3','u1,u2');
    foreach($array as $k=>$v)
    {
        $sub_arr = explode(',',$v);
        asort($sub_arr);
        $array[$k] = implode(',',$sub_arr);
    }

    $unique_array = array_unique($array);

    //$unique_array = array_values($unique_array) //if you want to preserve the ordered keys
于 2013-08-27T10:45:48.503 回答