<?php
function arrayRecursiveDiff($array1, $array2){
$aReturn = array();
foreach ($array1 as $mKey => $mValue) {
if (is_array($array2) && array_key_exists($mKey, $array2)) {
if (is_array($mValue)) {
$aRecursiveDiff = arrayRecursiveDiff($mValue, $array2[$mKey]);
if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
} else {
if ($mValue != $array2[$mKey]) {
$aReturn[$mKey] = $mValue;
}
}
} else {
$aReturn[$mKey] = $mValue;
}
}
return $aReturn;
}
function arrayIsDeeper($array, $level = 1){
$current_depth = 1;
foreach($array as $value)
if(is_array($value)) {
$current_depth ++;
if($current_depth > $level)
return true;
else return arrayIsDeeper($value, $level-1);
}
return false;
}
function arrayRecursiveReindex(&$array){
// if this is a
if(!arrayIsAssoc($array)){
$array = array_values($array);
}
if(arrayIsDeeper($array, 1)){
foreach($array as $key => $value){
if(is_array($value))
arrayRecursiveReindex($array[$key]);
}
}
}
function arrayIsAssoc($arr)
{
foreach(array_keys($arr) as $key) if(!is_integer($key)) return true;
return false;
}
$a = array("installed" => array('somevalue2', 'somevalue1', array('somethingelse2'), 'somevalue3'),
"backend" => array("preload" => array('somevalue4'=>array('value1', 'value2','value3'),'somevalue5')));
$b = array("installed" => array('somevalue2', array('somethingelse'), 'somevalue5', 'somevalue10'),
"backend" =>array("preload" => array('somevalue4'=>array('value1', 'value4','value5'),'somevalue6')));
var_dump($aDiff=arrayRecursiveDiff($a, $b));
var_dump(arrayIsDeeper($aDiff, 2));
arrayRecursiveReindex($aDiff);
var_dump($aDiff);