Я пишу рекурсивную функцию для распечатки различий между двумя многомерными массивами php.Цель этого кода - увидеть разницу между заголовками jpeg, чтобы определить, как Adobe Bridge CS3 сохраняет информацию о рейтинге в файле jpg.
Когда я пошагово выполняю код, используя мой eclipse - zend debugger ideПохоже, что даже если исходный оператор if является ложным (т. е. ни одно из значений не является массивом), последующие операторы elseif никогда не выполняются.Функция прикреплена ниже.
Примечание: Изменения по сравнению с оригинальным сообщением на основе комментариев
Добавлен уровень по умолчанию = ''
Удалены комментарии между блоками if {} elseif {}
Удаленоеще;в конце блока, который не имел функции закодировал символы <и>, чтобы в моем коде отображалась угловая скобка
function array_diff_multi($array1,$array2,$level=''){
$keys = array_keys($array1);
foreach($keys as $key)
{
$value1 = $array1[$key];
if(array_key_exists($key,$array2) ){
$value2 = $array2[$key];
if (is_array($value1) && is_array($value2)){ // Check if they are both arrays, if so recursion is needed
array_diff_multi($value1,$value2,$level . "[ " . $key . " ]");
}
elseif(is_array($value1) != is_array($value2)){ // Recursion is not needed, check if comparing an array to another type
print "<br>" . $level . $key ."=>" . $value1 . "as array, compared to ". $value2 ."<br>";
}
elseif($value1 != $value2){ // the values don't match, print difference
print "<br>" . $level . $key ."=>" . $value1 ." != " . $value2 ."<br>";
}
}
else{
print "<br>" . $level. $key . "does not exist in array2";
}
}
}