我正在编写一个递归函数来打印出2个多维php数组之间的差异。此代码的目的是查看jpeg标头之间的区别,以确定adobe bridge cs3如何在jpg文件中保存评级信息。
当我使用我的eclipse - zend调试器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"; } } }
答案 0 :(得分:2)
else;
最后......?
尝试将其删除或将其转换为“真实代码”
答案 1 :(得分:0)
这并不能完全回答您的问题,但我认为Adobe Bridge会将dotfiles中的元数据保存在与文件相同的目录中。例如,排序信息保存在.bridgesort
文件中。
答案 2 :(得分:0)
跳过所有elseif
s的唯一方法是两个变量不是数组并且是相等的。
答案 3 :(得分:0)
这对我来说很好。我把你的函数(与在level参数中添加''的默认值)的微小区别,以及这两个数组:
$a1 = array('foo', 'bar', 2, array('baz', '3', 4, array(54,45)));
$a2 = array('faz', 'bar', 4, array('buz', '3', 5, 54));
得到了这个输出:
0=>foo != faz
2=>2 != 4
[ 3 ]0=>baz != buz
[ 3 ]2=>4 != 5
[ 3 ]3=>Arrayas array, compared to 54
也许你的起始阵列不是你认为的那样......?