【问题标题】:Opposite of array_intersect?array_intersect 的对面?
【发布时间】:2011-07-31 17:37:22
【问题描述】:

是否有内置函数可以获取数组 1 中不存在于数组 2 中的所有成员?
我知道如何以编程方式进行操作,只是想知道是否有一个内置函数可以做到这一点。所以拜托,没有代码示例。

【问题讨论】:

标签: php arrays array-intersect


【解决方案1】:

这听起来像是 array_diff 的工作。

返回一个包含所有 来自 array1 的条目不是 存在于任何其他数组中。

【讨论】:

    【解决方案2】:
    $diff = array_diff($array1, $array2);
    

    array_diff()

    【讨论】:

      【解决方案3】:

      array_diff 绝对是显而易见的选择,但从技术上讲,它与数组相交并不相反。举个例子:

      $arr1 = array('rabbit','cat','dog');
      
      $arr2 = array('cat','dog','bird');
      
      print_r( array_diff($arr1, $arr2) );
      

      您想要的是其中包含“兔子”和“鸟”的结果,但您得到的只是兔子,因为它正在寻找第一个数组中的内容而不是第二个数组(反之亦然)。要真正获得您想要的结果,您必须执行以下操作:

      $arr1 = array('rabbit','cat','dog');
      
      $arr2 = array('cat','dog','bird');
      
      $diff1 = array_diff($arr1, $arr2);
      $diff2 = array_diff($arr2, $arr1);
      print_r( array_merge($diff1, $diff2) );
      

      注意:此方法仅适用于带有数字键的数组。

      【讨论】:

      • 谢谢你,这就是我要找的,这应该被标记为解决方案
      【解决方案4】:

      我发现这个docstore.mik.ua/orelly/webprog/pcook/ch04_24.htm 非常有用。

      您可能需要反向 diff,通过反转标准 diff 中的数组顺序。

      【讨论】:

        【解决方案5】:

        在我调查这个问题时澄清一下,@Jon 和@Dallas Caley 的答案都是正确的,具体取决于您的数组域。

        如果与您比较的数组是结果的完整域,那么根据@Jon 的答案,一个简单的 array_diff 就足够了。

        如果与您比较的数组不是结果的完整域,那么您应该按照@Dallas Caley 的回答使用双数组差异。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-17
          • 1970-01-01
          • 1970-01-01
          • 2020-07-31
          • 2017-05-09
          • 2017-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多