PHP:在两个多维数组中查找差异
我正在编写一个PHP脚本,它每24小时创建一个所选目录中所有文件的报告。我想将最新的报告与以前的报告进行比较,以检测对文件的任何编辑(通过比较md5哈希)、文件的删除和文件的创建。我将两份报告的数据放在两个单独的数组中。根据我所能收集的信息,我将不得不使用array_diff函数。如何:A)将其用于多维数组,B)如果差异是编辑、删除或创建,则使用标签 数据示例: 新报告:PHP:在两个多维数组中查找差异,php,arrays,array-difference,Php,Arrays,Array Difference,我正在编写一个PHP脚本,它每24小时创建一个所选目录中所有文件的报告。我想将最新的报告与以前的报告进行比较,以检测对文件的任何编辑(通过比较md5哈希)、文件的删除和文件的创建。我将两份报告的数据放在两个单独的数组中。根据我所能收集的信息,我将不得不使用array_diff函数。如何:A)将其用于多维数组,B)如果差异是编辑、删除或创建,则使用标签 数据示例: 新报告: Array ( [0] => Array ( [file] =>
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
)
)
首先,您应该将对象转换为数组,我认为您可以轻松地完成。 然后您可以使用for-each或for或while循环,但我宁愿使用user-for循环来更好地识别序列。 我同意你对函数
array\u 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
}
这与页面完全相同。根据该链接,“此函数仅检查n维数组的一个维度。当然,您可以使用array_diff($array1[0],$array2[0]);”检查更深的维度。@EmmyS无法实现这一点。可能重复的功能不起作用。我正在处理一个多维数组。