RT。
我有3个数组,结构如下
1,2,3,4,5,6,7,8
2,3,4,5,9,11,22
5,67,34,77,86,1,2如何筛选掉3个数组中有重复出现的数据。得到一个新的数组?

解决方案 »

  1.   


    $a[] = array(1,2,3,4,5,6,7,8);
    $a[] = array(2,3,4,5,9,11,22);
    $a[] = array(5,67,34,77,86,1,2);
    $res = array();
    foreach($a AS $val)
    {
    foreach($val AS $v)
    {
    $res[$v] = isset($res[$v]) ? 0 : 1;
    }
    }
    print_r(array_keys($res, 1));
    /*
    Array ( [0] => 6 [1] => 7 [2] => 8 [3] => 9 [4] => 11 [5] => 22 [6] => 67 [7] => 34 [8] => 77 [9] => 86 )
    */
      

  2.   


    array_intersect() 函数返回两个或多个数组的交集数组。结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。注释:仅有值用于比较。语法
    array_intersect(array1,array2,array3...)
      

  3.   

    <?
    $array1 = array(1,2,3,4,5,6,7,8);
    $array2 = array(2,3,4,5,9,1,22);
    $array3 = array(5,67,34,77,86,1,2);$array=array_intersect($array1,$array2,$array3);
    print_r($array);
    ?>
      

  4.   

    可能我理解错LZ意思了array_intersect返回的是2或者更多数组的最大公共子集。如果需要这个结果,自然首选这个函数
    =======================如果是N个数组中,列出仅出现一次的元素,则不适用该函数。前面#1稍微修改下,就能随便找出出现几次的函数
      

  5.   

    你说的重复分两种情况1.三个数组同时出现相同的数据:array_intersect(array1,array2,array3...)2.只要一个数据在其中两个数组出现过:参考1楼解法!
      

  6.   

    使用函数array_merge和array_unique$array1 = array(1,2,3,4,5,6,7,8);
    $array2 = array(2,3,4,5,9,1,22);
    $array3 = array(5,67,34,77,86,1,2);$ar = array_merge($array1, $array2, $array3);
    $ar = array_unique($ar);至于哪种方法高效,可以自己计算一下效率
      

  7.   

    array_unique会保留一个重复出现的结果
      

  8.   

    对,我这里不需要重复的值,一开始我把值当做另一个数组的键,用HASHMAP 我记得键是唯一的。所以不会有重复。