0

選択したディレクトリのすべてのファイルのレポートを 24 時間ごとに作成するスクリプト PHP スクリプトを作成しています。最新のレポートを以前のレポートと比較して、(md5 ハッシュを比較することにより) ファイルの編集、ファイルの削除、およびファイルの作成を検出したいと考えています。2 つの別々の配列に 2 つのレポートのデータがあります。私が収集できるものから、array_diff 関数を使用する必要があります。どうすればいいですか: A) これを多次元配列で使用し、B) 違いが編集、削除、または作成のいずれかである場合はラベルを付けます。

データの例:

新しいレポート:

Array
(
    [0] => Array
        (
            [file] => newhotfolder.gif
            [path] => images/newhotfolder.gif
            [type] => gif
            [size] => 1074
            [md5] => 123812asdkbqw98eqw80hasdas234234
        )

    [1] => Array
        (
            [file] => image.gif
            [path] => images/attachtypes/image.gif
            [type] => gif
            [size] => 625
            [md5] => 7bbb66e191688a86b6f42a03bd412a6b
        )

    [2] => Array
        (
            [file] => header.gif
            [path] => images/attachtypes/header.gif
            [type] => gif
            [size] => 625
            [md5] => 71291239asskf9320234kasjd8239393
        )
)

古いレポート:

Array
(
    [0] => Array
        (
            [file] => newhotfolder.gif
            [path] => images/newhotfolder.gif
            [type] => gif
            [size] => 1074
            [md5] => 8375h5910423aadbef67189c6b687ff51c
        )

    [1] => Array
        (
            [file] => image.gif
            [path] => images/attachtypes/image.gif
            [type] => gif
            [size] => 625
            [md5] => 7bbb66e191688a86b6f42a03bd412a6b
        )

    [2] => Array
        (
            [file] => footer.gif
            [path] => images/attachtypes/footer.gif
            [type] => gif
            [size] => 625
            [md5] => 1223819asndnasdn2213123nasd921
        )
)

関数は、「newhotfolder.gif」の md5 ハッシュが変更されたこと、ファイル「footer.gif」が削除されたこと、および「header.gif」が追加されたことを検出できる必要があります。おそらく、次のような 3 番目の配列を返しますか?:

比較:

Array
(
    [0] => Array
        (
            [file] => newhotfolder.gif
            [path] => images/newhotfolder.gif
            [type] => gif
            [size] => 1074
            [md5] => 8375h5910423aadbef67189c6b687ff51c
            [status] => edited
        )

    [1] => Array
        (
            [file] => image.gif
            [path] => images/attachtypes/image.gif
            [type] => gif
            [size] => 625
            [md5] => 7bbb66e191688a86b6f42a03bd412a6b
            [status] => same
        )

    [2] => Array
        (
            [file] => footer.gif
            [path] => images/attachtypes/footer.gif
            [type] => gif
            [size] => 625
            [md5] => 1223819asndnasdn2213123nasd921
            [status] => deleted
        )

    [3] => Array
        (
            [file] => header.gif
            [path] => images/attachtypes/header.gif
            [type] => gif
            [size] => 625
            [md5] => 71291239asskf9320234kasjd8239393
            [status] => new
        )
)
4

1 に答える 1

0

まず、オブジェクトを配列に変換する必要があります。簡単にできると思います。次に、 for each または for または while ループを使用できますが、 for ループを使用してシーケンスをより適切に識別できます。そして、私はあなたに同意します、関数array_diff() array_diff()は違いが何であれ出力するので、それらが等しいかどうかを確認するためにあなたは言うことができます array_diff($array1, $array2);

値を配列として返す必要があります。同じだとこうなる

array(0){
}

それらが同じでない場合、配列の違いに関係なく、配列内のページに出力されます。私は次のように同じようなロジックを使用しましたが、あなたもそれを使用できると思います。

$a1=array('val1'=>'abc', 'val2'=>'def', 'val3'=>'ghi', 'val4'=>'jkl');
$a2=array( 'val4'=>'jkl', 'val2'=>'def', 'val1'=>'abc', 'val3'=>'ghi' );

            if($a1==$a2 and sizeof(array_diff($a1, $a2))==0 and sizeof(array_diff($a2, $a1))==0) {
                echo "identical";
                //do your thing here
            }

これは、ページと同じようにエコーします。

于 2013-11-15T21:30:07.760 に答える