This function compares two multi dimensional arrays and returns an array containing the new, removed and changed values as separate array.
<?php function compareArrays($array1, $array2) { $result = [ 'new' => [], 'removed' => [], 'changed' => [] ]; // Check for new and changed values foreach ($array2 as $key => $value) { if (array_key_exists($key, $array1)) { if (is_array($value) && is_array($array1[$key])) { $recursiveResult = compareArrays($array1[$key], $value); if (!empty($recursiveResult['new'])) { $result['new'][$key] = $recursiveResult['new']; } if (!empty($recursiveResult['removed'])) { $result['removed'][$key] = $recursiveResult['removed']; } if (!empty($recursiveResult['changed'])) { $result['changed'][$key] = $recursiveResult['changed']; } } elseif ($value !== $array1[$key]) { $result['changed'][$key] = [ 'old' => $array1[$key], 'new' => $value ]; } } else { $result['new'][$key] = $value; } } // Check for removed values foreach ($array1 as $key => $value) { if (!array_key_exists($key, $array2)) { $result['removed'][$key] = $value; } } return $result; }
Example usage:
$array1 = [ 'name' => 'John', 'age' => 30, 'address' => [ 'city' => 'New York', 'state' => 'NY' ], 'hobbies' => ['reading', 'traveling'] ]; $array2 = [ 'name' => 'John', 'age' => 31, 'address' => [ 'city' => 'San Francisco', 'state' => 'CA' ], 'hobbies' => ['reading', 'sports'], 'profession' => 'Developer' ]; $differences = compareArrays($array1, $array2); print_r($differences); ?>