【问题标题】:PHP: Finding differences in two multidimensional arraysPHP:查找两个多维数组的差异
【发布时间】:2013-11-15 21:01:41
【问题描述】:

我正在编写一个脚本 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
        )
)

【问题讨论】:

标签: php arrays array-difference


【解决方案1】:

首先你应该将对象转换成数组,我假设你可以很容易地做到这一点。 然后您可以使用 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
            }

这与页面相同。

【讨论】:

  • 这不起作用。我正在处理一个多维数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2016-07-04
  • 1970-01-01
  • 2019-01-20
  • 2016-05-01
  • 2019-05-26
  • 2015-03-26
相关资源
最近更新 更多