PHP - Check if two arrays are equal

后端 未结 15 2075
说谎
说谎 2020-11-22 11:26

I\'d like to check if two arrays are equal. I mean: same size, same index, same values. How can I do that?

Using !== as suggested by a user, I expect th

15条回答
  •  余生分开走
    2020-11-22 11:48

    Here is the example how to compare to arrays and get what is different between them.

    $array1 = ['1' => 'XXX', 'second' => [
                'a' => ['test' => '2'],
                'b' => 'test'
            ], 'b' => ['no test']];
    
            $array2 = [
                '1' => 'XX',
                'second' => [
                    'a' => ['test' => '5', 'z' => 5],
                    'b' => 'test'
                ],
                'test'
            ];
    
    
            function compareArrayValues($arrayOne, $arrayTwo, &$diff = [], $reversed = false)
            {
                foreach ($arrayOne as $key => $val) {
                    if (!isset($arrayTwo[$key])) {
                        $diff[$key] = 'MISSING IN ' . ($reversed ? 'FIRST' : 'SECOND');
                    } else if (is_array($val) && (json_encode($arrayOne[$key]) !== json_encode($arrayTwo[$key]))) {
                        compareArrayValues($arrayOne[$key], $arrayTwo[$key], $diff[$key], $reversed);
                    } else if ($arrayOne[$key] !== $arrayTwo[$key]) {
                        $diff[$key] = 'DIFFERENT';
                    }
                }
            }
    
            $diff = [];
            $diffSecond = [];
    
            compareArrayValues($array1, $array2, $diff);
            compareArrayValues($array2, $array1, $diffSecond, true);
    
            print_r($diff);
            print_r($diffSecond);
    
            print_r(array_merge($diff, $diffSecond));
    

    Result:

    Array
    (
        [0] => DIFFERENT
        [second] => Array
            (
                [a] => Array
                    (
                        [test] => DIFFERENT
                        [z] => MISSING IN FIRST
                    )
    
            )
    
        [b] => MISSING IN SECOND
        [1] => DIFFERENT
        [2] => MISSING IN FIRST
    )
    

提交回复
热议问题