php 两个数组的区别

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10077840/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 21:19:51  来源:igfitidea点击:

difference between two arrays

php

提问by user1178695

I have following two arrays. I want the difference between these two arrays. That is, how can I find the values that do not exist in both arrays?

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

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

回答by Crashspeeder

To get the difference between the two arrays you need to do the following:

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

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

The reason being that array_diff()will only give you the values that are in $array1but not $array2, not the other way around. The above will give you both.

原因是这array_diff()只会为您提供 in$array1而不是的值,而不是$array2相反。以上将为您提供。

回答by KingCrunch

Note:this answer will return the values in $array2that are not present in $array1, it will not return the values in $array1that are not in $array2.

注意:这个答案将返回的值$array2是不存在的$array1,它不会返回值$array1不在$array2

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

array_diff()

array_diff()

回答by M Rostami

If you want to get difference between arrays recursively, try this function:

如果你想递归地得到数组之间的差异,试试这个函数:

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;
}

Test:

测试:

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

回答by Andreas Wong

array_diff?

数组差异?

http://php.net/array_diff

http://php.net/array_diff

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

回答by Ashwin Parmar

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

?>

Output:

输出:

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
)