【问题标题】:How to compare two arrays and remove matching elements from one for the next loop?如何比较两个数组并从中删除匹配元素以进行下一个循环?
【发布时间】:2010-09-18 12:43:20
【问题描述】:

您还能如何比较两个数组($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。

【问题讨论】:

  • 可能是我,但我认为问题不是很清楚。当我读到它时,您只对 array_diff($A,$B) 感兴趣(这看起来很简单)。还是 $C 的计算也必不可少? (如果是这样,您可以使用 array_diff($A,$C) 代替 array_diff($A,$B)。)
  • 不,我声明 $C 是 $A 和 $B 的交集

标签: php arrays


【解决方案1】:

你明白了。只需使用array_diffarray_intersect。没有比这更容易的了。

编辑: 例如:

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

Source

【讨论】:

【解决方案2】:

亲爱的简单干净的方法

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2);

【讨论】:

  • 这个答案更好,因为它重新排列匹配索引上的数组元素。与斯图尔特的答案不同,它将从匹配的索引中删除元素。所以如果索引 1 处有匹配的元素,你尝试访问结果数组中的索引 1,它会抛出错误。
【解决方案3】:

另见array_unique。如果你连接两个数组,它会抽出所有重复的。

【讨论】:

    【解决方案4】:

    嘿,更好的解决方案:array _ uintersect. 这让您可以根据 array_intersect 比较数组,然后它可以让您将数据与回调函数进行比较。

    【讨论】:

      【解决方案5】:

      试试这个

      $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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多