开发者

PHP elseif statement not executed even though initial if statement is false

I am writing a recursive function to print out the differences between 2 multildimensional php arrays. The purpose of this code is t开发者_JAVA技巧o see the difference between jpeg headers to deteremine how adobe bridge cs3 is saving rating information within the jpg file.

When I am single-stepping through the code using my eclipse - zend debugger ide, it appears that even though the initial if statement is false (ie neither values is an array), the subsequent elseif statements are never executed. The function is attached below.

Note: Changes since original post based on comments

Added a default level= ''

Removed comments between the if{} elseif{} blocks

Removed an else; at the end of the block that had no function Encoded the < and > symbols so angle bracket would show in my code

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";
    }
  }
}


could it be because you have

else;

at the end...?

Try removing that or turning that into 'real code'


It works fine for me here. I put your function (with the tiny difference of adding a default value of '' to the level parameter), and these two arrays:

$a1 = array('foo', 'bar', 2, array('baz', '3', 4, array(54,45)));
$a2 = array('faz', 'bar', 4, array('buz', '3', 5, 54));

And got this output:

0=>foo != faz

2=>2 != 4

[ 3 ]0=>baz != buz

[ 3 ]2=>4 != 5

[ 3 ]3=>Arrayas array, compared to  54

Perhaps your starting arrays are not what you think they are...?


This doesn't exactly answer your question, but I think Adobe Bridge saves metadata in dotfiles in the same directory as the files. For example, sort information is saved in a .bridgesort file.


The only way that all the elseifs would be skipped is if the two variables are not arrays and are equal.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜