即使初始if语句为false,也不执行PHP elseif语句

时间:2010-06-14 21:53:06

标签: php recursion control-flow

我正在编写一个递归函数来打印出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";
    }
  }
}

4 个答案:

答案 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

也许你的起始阵列不是你认为的那样......?