Ben 2 multildimensional php diziler arasındaki farklılıkları yazdırmak için bir özyinelemeli işlev yazıyorum. Bu kodun amacı, Adobe Bridge CS3 jpg dosyası içinde değerlendirmesi bilgi tasarrufu nasıl deteremine jpeg başlıklar arasında farkı görmek için.
Ben Tutulma kullanarak kod boyunca tek atlama olduğum zaman - zend debugger ide, bu deyimi (yani ne değerler bir dizidir) false bile ilk olsa, sonraki elseif ifadeleri idam asla görünür. Bu fonksiyon aşağıdaki takılır.
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"; } } }