代码之家  ›  专栏  ›  技术社区  ›  kevtrout

如何比较两个数组并为下一个循环从一个数组中删除匹配的元素?

  •  12
  • kevtrout  · 技术社区  · 16 年前

    另外,您如何比较两个数组($A和$B),并从第一个数组中减少匹配元素以准备在数组$A上进行下一个循环?

    $A = array(1,2,3,4,5,6,7,8);
    $B = array(1,2,3,4);
    
    $C = array_intersect($A,$B);  //equals (1,2,3,4)
    $A = array_diff($A,$B);       //equals (5,6,7,8)
    

    这是最简单的方法还是有一种方法可以使用我没有想到的另一个函数?我的目标是拥有一个可以循环的数组,拉出相关内容组(我在其他地方定义了这些关系),直到数组返回false。

    5 回复  |  直到 8 年前
        1
  •  12
  •   Keyur    8 年前

    你明白了。只使用 array_diff array_intersect . 不会比这容易得多。

    编辑: 例如:

    $arr_1 = array_diff($arr_1, $arr_2);
    $arr_2 = array_diff($arr_2, $arr_1);
    

    Source

        2
  •  2
  •   warren    16 年前

    也见 array_unique . 如果将这两个数组连接起来,它就会将所有重复的数组都拉出来。

        3
  •  2
  •   Kalpesh Bhaliya    8 年前

    亲爱的安逸和干净的方式

    $clean1 = array_diff($array1, $array2); 
    $clean2 = array_diff($array2, $array1); 
    $final_output = array_merge($clean1, $clean2);
    
        4
  •  0
  •   rg88    16 年前

    嘿,更好的解决方案: array _ uintersect. 这可以让您按照数组相交来比较数组,但是它可以让您将数据与回调函数进行比较。

        5
  •  0
  •   Piotr Olaszewski    10 年前

    尝试这个

    $a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w');
    $b = array(1=>'a',6=>'b',2=>'y',3=>'z');
    $c = array_intersect($a, $b);
    
    $result = array_diff($a, $c);
    print_r($result);
    
    推荐文章