2 つの多次元 PHP 配列の違いを出力する再帰関数を作成しています。このコードの目的は、jpeg ヘッダーの違いを確認して、adobe bridge cs3 が評価情報を jpg ファイル内に保存する方法を判断することです。
eclipse - zend デバッガー IDE を使用してコードをシングルステップ実行すると、最初の if ステートメントが false (つまり、どちらの値も配列ではない) でも、後続の elseif ステートメントが実行されないように見えます。以下に関数を添付します。
注: コメントに基づく元の投稿以降の変更
デフォルトの level= '' を追加しました
if{} elseif{} ブロック間のコメントを
削除しました else;を削除しました。機能を持たないブロックの最後に < および > 記号をエンコードして、山かっこがコードに表示されるようにしました
function array_diff_multi($array1,$array2,$level=''){ $keys = array_keys($array1); foreach($キーを$キーとして) { $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 ."=>" . $value1 . "配列として、" と比較して。$value2 ."<br>"; } elseif($value1 != $value2){ // 値が一致しません。違いを出力します "<br>" を印刷します。$レベル。$key ."=>" . $value1 ." != " . $value2 ."<br>"; } } そうしないと{ "<br>" を印刷します。$レベル。$キー . "array2 に存在しません"; } } }