【问题标题】:difference between two arrays两个数组的区别
【发布时间】:2012-04-09 18:25:30
【问题描述】:

我有以下两个数组。我想要这两个数组之间的区别。也就是如何找到两个数组中都不存在的值?

 $array1=Array ( [0] => 64 [1] => 98 [2] => 112 [3] => 92 [4] => 92 [5] => 92 ) ;
 $array2=Array ( [0] => 3 [1] => 26 [2] => 38 [3] => 40 [4] => 44 [5] => 46 [6] => 48 [7] => 52 [8] => 64 [9] => 68 [10] => 70 [11] => 72 [12] => 102 [13] => 104 [14] => 106 [15] => 92 [16] => 94 [17] => 96 [18] => 98 [19] => 100 [20] => 108 [21] => 110 [22] => 112);

【问题讨论】:

    标签: php


    【解决方案1】:

    要获得两个数组之间的差异,您需要执行以下操作:

    $fullDiff = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));
    

    原因是array_diff() 只会给你$array1 中的值而不是$array2,而不是相反。以上将为您提供两者。

    【讨论】:

    • 如需维护密钥:$full_diff = array_diff($array1, $array2) + array_diff($array2, $array1);
    【解决方案2】:

    注意:此答案将返回$array2 中不存在于$array1 中的值,它不会返回$array1 中不存在于$array2 中的值。

    $diff = array_diff($array2, $array1);
    

    array_diff()

    【讨论】:

    • 这似乎不正确 - 它不会从 $array2 返回 $array1 中不存在的值。 Crasherspeeder 似乎是对的。
    • @Crasherspeeder 是正确的,这是一个单向检查 - 提问者想要两者。
    • array_diff_* 系列还为多维数组抛出“ErrorException: Array to string conversion”。
    【解决方案3】:

    如果你想递归获取数组之间的差异,试试这个函数:

    function arrayDiffRecursive($firstArray, $secondArray, $reverseKey = false)
    {
        $oldKey = 'old';
        $newKey = 'new';
        if ($reverseKey) {
            $oldKey = 'new';
            $newKey = 'old';
        }
        $difference = [];
        foreach ($firstArray as $firstKey => $firstValue) {
            if (is_array($firstValue)) {
                if (!array_key_exists($firstKey, $secondArray) || !is_array($secondArray[$firstKey])) {
                    $difference[$oldKey][$firstKey] = $firstValue;
                    $difference[$newKey][$firstKey] = '';
                } else {
                    $newDiff = arrayDiffRecursive($firstValue, $secondArray[$firstKey], $reverseKey);
                    if (!empty($newDiff)) {
                        $difference[$oldKey][$firstKey] = $newDiff[$oldKey];
                        $difference[$newKey][$firstKey] = $newDiff[$newKey];
                    }
                }
            } else {
                if (!array_key_exists($firstKey, $secondArray) || $secondArray[$firstKey] != $firstValue) {
                    $difference[$oldKey][$firstKey] = $firstValue;
                    $difference[$newKey][$firstKey] = $secondArray[$firstKey];
                }
            }
        }
        return $difference;
    }
    

    测试:

    $differences = array_replace_recursive(
        arrayDiffRecursive($firstArray, $secondArray),
        arrayDiffRecursive($secondArray, $firstArray, true)
    );
    var_dump($differences);
    

    【讨论】:

    • 网络上php的最佳递归数组差异
    • 出色的工作这是每个人都在寻找的。​​span>
    【解决方案4】:

    array_diff?

    http://php.net/array_diff

    var_dump(array_diff($array2, $array1));
    

    【讨论】:

      【解决方案5】:
      <?php
      function getArrayDiff($a1, $a2) {
          $result = array();
      
          print_r($a1);
          print_r($a2);
      
          // If First Array is Bigger than Second
          if( count($a1) > count($a2) ) {
              $result=array_diff($a1,$a2);
          }
          // If Second Array is Bigger than First
          if( count($a1) < count($a2) ) {
              $result=array_diff($a2,$a1);
          }
          // If Both array are same but, data values are different.
          else
          {
              $result = array_merge (array_diff($a2,$a1), array_diff($a1,$a2));   
          }
          return $result;
      }
      
      print "<pre>";
      // First Array is Big
      echo "First Array is Big <br/>";
      $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
      $a2=array("e"=>"red","f"=>"green","g"=>"blue");
      print_r( getArrayDiff($a1, $a2) );
      
      // Second Array is Big
      echo "Second Array is Big <br/>";
      $a1=array("e"=>"red","f"=>"green","g"=>"blue");
      $a2=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
      print_r( getArrayDiff($a1, $a2) );
      
      // Both Array are same
      echo "Both Array are same <br/>";
      $a1=array("a"=>"red","b"=>"green","d"=>"yellow");
      $a2=array("e"=>"red","f"=>"green","g"=>"blue");
      print_r( getArrayDiff($a1, $a2) );
      
      ?>
      

      输出:

      First Array is Big 
      Array
      (
          [a] => red
          [b] => green
          [c] => blue
          [d] => yellow
      )
      Array
      (
          [e] => red
          [f] => green
          [g] => blue
      )
      Array
      (
          [d] => yellow
      )
      Second Array is Big 
      Array
      (
          [e] => red
          [f] => green
          [g] => blue
      )
      Array
      (
          [a] => red
          [b] => green
          [c] => blue
          [d] => yellow
      )
      Array
      (
          [d] => yellow
      )
      Both Array are same 
      Array
      (
          [a] => red
          [b] => green
          [d] => yellow
      )
      Array
      (
          [e] => red
          [f] => green
          [g] => blue
      )
      Array
      (
          [g] => blue
          [d] => yellow
      )
      

      【讨论】:

        【解决方案6】:

        如果你打算使用array_diff()
        需要记住的是,参数的编写顺序。

        PHP 文档:array_diff

        # array_diff(1, 2)
        array_diff($one, $two);
        
        # array_diff(2, 1)
        array_diff($two, $one); // produces different result.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 2014-02-26
          • 1970-01-01
          相关资源
          最近更新 更多