0

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 に存在しません";
    }
  }
}
4

4 に答える 4

2

あなたが持っているからかもしれません

else;

最後に...?

それを削除するか、それを「実際のコード」に変えてみてください

于 2010-06-14T22:10:11.113 に答える
0

これはあなたの質問に正確に答えるものではありませんが、AdobeBridgeはメタデータをファイルと同じディレクトリのドットファイルに保存すると思います。たとえば、並べ替え情報は.bridgesortファイルに保存されます。

于 2010-06-14T21:56:25.493 に答える
0

すべてのがスキップされる唯一の方法elseifは、2つの変数が配列ではなく、等しい場合です。

于 2010-06-14T21:56:48.260 に答える
0

ここで私にとってはうまくいきます。私はあなたの関数を置きます(デフォルト値 '' をレベルパラメータに追加するという小さな違いがあります)、およびこれらの2つの配列:

$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 に答える