복붙노트

두 배열 간의 차이

PHP

두 배열 간의 차이

나는 두 개의 배열을 따르고있다. 나는이 두 배열의 차이점을 원한다. 즉, 두 배열에 존재하지 않는 값을 어떻게 찾을 수 있습니까?

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

해결법

  1. ==============================

    1.참고 :이 대답은 $ array1에 존재하지 않는 $ array2의 값을 반환 할 것이고 $ array2에없는 $ array1의 값을 반환하지 않을 것입니다.

    참고 :이 대답은 $ array1에 존재하지 않는 $ array2의 값을 반환 할 것이고 $ array2에없는 $ array1의 값을 반환하지 않을 것입니다.

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

    array_diff ()

  2. ==============================

    2.두 배열의 차이점을 얻으려면 다음을 수행해야합니다.

    두 배열의 차이점을 얻으려면 다음을 수행해야합니다.

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

    그 이유는 array_diff ()가 $ array1에있는 값만 제공하고 $ array2는 아닌 다른 값을 제공하기 때문입니다. 위는 둘 다 줄 것입니다.

  3. ==============================

    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);
    
  4. ==============================

    4.array_diff?

    array_diff?

    http://php.net/array_diff

    var_dump(array_diff($array2, $array1));
    
  5. ==============================

    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. from https://stackoverflow.com/questions/10077840/difference-between-two-arrays by cc-by-sa and MIT license