Merges keys from both arrays and checks each one. Missing in new = removed, missing in old = added, both arrays = recurse with dot-appended path, scalar mismatch = changed. Returns a flat map of paths to old/new values.

PHP Code Editor

<?php
/**
* Deep diff between two arrays.
* Returns changes as ['path' => ['old' => ..., 'new' => ...]]
* Paths use dot notation: 'user.address.city'
*/
function arrayDiff(array $old, array $new, string $prefix = ''): array
{
$changes = [];
$allKeys = array_unique(array_merge(array_keys($old), array_keys($new)));
foreach ($allKeys as $key) {
$path = $prefix !== '' ? "$prefix.$key" : (string)$key;
$inOld = array_key_exists($key, $old);
$inNew = array_key_exists($key, $new);
if (!$inOld) {
$changes[$path] = ['type' => 'added', 'old' => null, 'new' => $new[$key]];
} elseif (!$inNew) {
$changes[$path] = ['type' => 'removed', 'old' => $old[$key], 'new' => null];
} elseif (is_array($old[$key]) && is_array($new[$key])) {
$changes = array_merge($changes, arrayDiff($old[$key], $new[$key], $path));
} elseif ($old[$key] !== $new[$key]) {
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PHP Version

Execution Result

Ready to execute

Click the "Run Script" button to see the output here