我正在编写一个脚本PHP脚本,该脚本每24小时创建一个所选目录的所有文件的报告。我想将最新报告与上一个报告进行比较,以检测文件的任何编辑(通过比较md5哈希),删除文件和创建文件。我在两个单独的数组中有两个报告的数据。根据我的收集,我将不得不使用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”。也许返回这样的第三个数组?:
比较:
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
)
)
答案 0 :(得分:0)
首先你应该把对象转换成数组,我假设你可以轻松地做到。
然后你可以使用每个或for或while循环但我宁愿用户循环来更好地识别序列。
我同意你的功能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
}
这个回声与页面相同。