【问题标题】:Find all differences in arrays查找数组中的所有差异
【发布时间】:2014-02-18 18:17:29
【问题描述】:

我有两个数组:

$array1 = array('red', 'blue', 'green', 'yellow');

$array2 = array('red', 'blue', 'green', 'yellow', 'blue', 'black');

我想知道它们之间的区别。

array_diff()可以告诉我黑色只出现在第二个数组中

array_unique() 只会显示唯一值/删除重复值,但不会告诉我 blue 是由于唯一而被删除的值。

是否有函数告诉我第二个数组 (blue) 中的重复值?

【问题讨论】:

标签: php arrays


【解决方案1】:

在数组中查找重复项

$result = array_filter(array_count_values($array2), function ($val) {
    return $val > 1;
});

$duplicates = array_keys($result);

输出:

Array
(
    [0] => blue
)

Online demo

【讨论】:

    【解决方案2】:

    没有,但你可以使用我在下面写的:

    <?php
    // function
    function dupes_in_array($array){
      if(!is_array($array)) return 0; // check, if $array is an array
      $arr = array_count_values($array);
      foreach($arr as $key => $val) { if($val > 1) $duplicates[] = $key; }
      return $duplicates;
    }
    
    // demonstration
    $array = array('red', 'blue', 'green', 'yellow', 'blue', 'black', 'green');
    $dupes = dupes_in_array($array);
    echo "Duplicate values: ";
    var_dump($dupes);
    
    ?>
    

    输出:

    Duplicate values: array(2) { [0]=> string(4) "blue" [1]=> string(5) "green" }
    

    注意:输出是“蓝色”和“绿色”,因为输入数组有两个重复。

    如果 $val&gt; 1,那么我们就有重复。

    参考:array_count_values

    【讨论】:

      【解决方案3】:

      如果您保留键值,array_diff_assoc 将起作用:

      php > $a1 = array('red', 'blue', 'green', 'yellow', 'blue', 'black');
      php > $a2 = array('red', 'blue', 'green', 'yellow');
      php > var_dump(array_diff_assoc($a1,$a2));
      array(2) {
        [4]=>
        string(4) "blue"
        [5]=>
        string(5) "black"
      }
      

      【讨论】:

        【解决方案4】:

        不妨加入我的解决方案:

        <?php
        
            $r1 = ["red","blue","green","yellow"];
            $r2 = ["red","blue","green","yellow","blue","black"];
        
            $diff = array_diff($r2,$r1);
            $dupe = array_keys(array_filter(array_count_values($r2), function ($val){
                                return $val > 1;}));
        
            var_dump(array_merge($diff,$dupe));
        
        ?>
        

        输出:

        array(2) {
          [0]=>
          string(5) "black"
          [1]=>
          string(4) "blue"
        }
        

        【讨论】:

          【解决方案5】:

          您可以通过将$array2array_unique($array2) 进行比较,如下所示:

          print_r(array_diff_assoc($array2, array_unique($array2)));
          

          输出:

          Array
          (
              [4] => blue
          )
          

          这不是最有效的,但它具有知道重复索引的优势。

          【讨论】:

            猜你喜欢
            • 2018-07-28
            • 2012-01-17
            • 1970-01-01
            • 1970-01-01
            • 2015-06-27
            • 1970-01-01
            • 2013-10-08
            • 1970-01-01
            • 2016-11-17
            相关资源
            最近更新 更多