note 73972 modified in function.array-diff-assoc by danbrown
| From: | danbrown@php.net | Date: | Sat, 14 Mar 2009 14:57:34 +0000 |
| Subject: | note 73972 modified in function.array-diff-assoc by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-151906@lists.php.net to get a copy of this message | ||
The following will recursively do an array_diff_assoc, which will calculate differences on a
multi-dimensional level. This not display any notices if a key don't exist and if
error_reporting is set to E_ALL:
<?php
function array_diff_assoc_recursive($array1, $array2)
{
foreach($array1 as $key => $value)
{
if(is_array($value))
{
if(!isset($array2[$key]))
{
$difference[$key] = $value;
}
elseif(!is_array($array2[$key]))
{
$difference[$key] = $value;
}
else
{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value)
{
$difference[$key] = $value;
}
}
return !isset($difference) ? 0 : $difference;
}
?>
[NOTE BY danbrown AT php DOT net: This is a combination of efforts from previous notes deleted.
Contributors included (Michael Johnson), (jochem AT iamjochem DAWT com), (sc1n AT yahoo DOT com),
and (anders DOT carlsson AT mds DOT mdh DOT se).]
--was--
A small modification for array_diff_assoc_recursive from 'sc1n at yahoo dot com' , to not
display any notices if a key don't exist and if error_reporting is set to E_ALL:
<?php
function array_diff_assoc_recursive($array1, $array2)
{
foreach($array1 as $key => $value)
{
if(is_array($value))
{
if(!isset($array2[$key]))
{
$difference[$key] = $value;
}
elseif(!is_array($array2[$key]))
{
$difference[$key] = $value;
}
else
{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value)
{
$difference[$key] = $value;
}
}
return !isset($difference) ? 0 : $difference;
}
?>
http://php.net/manual/en/function.array-diff-assoc.php