0

我正在编写一个递归函数来打印出 2 个多维 php 数组之间的差异。此代码的目的是查看 jpeg 标头之间的差异,以确定 adobe bridge cs3 如何在 jpg 文件中保存评级信息。

当我使用我的 eclipse - zend 调试器 ide 单步执行代码时,似乎即使初始 if 语句为假(即,两个值都不是数组),后续 elseif 语句也不会执行。函数附在下面。

注意:自原始帖子以来基于评论的更改
添加了默认级别=''
删除了 if{} elseif{} 块之间的评论
删除了一个 else; 在没有函数的块的末尾对 < 和 > 符号进行了编码,因此尖括号将显示在我的代码中

函数array_diff_multi($array1,$array2,$level=''){
  $keys = array_keys($array1);
  foreach($keys 作为 $key)
  {
    $value1 = $array1[$key];
    if(array_key_exists($key,$array2)){
      $value2 = $array2[$key];

      if (is_array($value1) && is_array($value2)){ // 检查它们是否都是数组,如果是则需要递归
        array_diff_multi($value1,$value2,$level . "[ " . $key . " ]");
      }
      elseif(is_array($value1) != is_array($value2)){ // 不需要递归,检查是否将数组与另一种类型进行比较
        打印“<br>”。$级别。$key ."=>" 。$ 价值 1 。“作为数组,与”相比。$value2 ."<br>";
      }
      elseif($value1 != $value2){ // 值不匹配,打印差异
        打印“<br>”。$级别。$key ."=>" 。$value1 ." != " . $value2 ."<br>";
      }
    }
    别的{                                              
      打印“<br>”。美元级别。$键。“在array2中不存在”;
    }
  }
}
4

4 回答 4

2

难道是因为你有

else;

在末尾...?

尝试删除它或将其转换为“真实代码”

于 2010-06-14T22:10:11.113 回答
0

这并不能完全回答您的问题,但我认为 Adob​​e Bridge 将元数据保存在与文件相同的目录中的点文件中。例如,排序信息保存在.bridgesort文件中。

于 2010-06-14T21:56:25.493 回答
0

跳过所有 s 的唯一方法elseif是两个变量不是数组并且相等。

于 2010-06-14T21:56:48.260 回答
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

也许您的起始数组不是您认为的那样......?

于 2010-06-14T23:19:49.527 回答