PHP 数组操作难题 - 从多维数组中提取单个名称/值对名称有许多重复值

问题描述

我正在我的服务器上构建一个简单的变更检测程序。对文件的合法更改来自 Beanstalk SVN 部署,它们在我的报告中代表噪音。我想从报告中排除这些文件

经过漫长而复杂的过程,我可以通过 Beanstalk API 提取受影响的文件名以及相关的存储库和修订版本,并将它们写入多维数组。文件名位于最低维度。当然,如果有意义的话,我可以以其他方式操纵这些数据。根据我的开发人员的工作方式,他们可能会在一天内多次提交对同一文件的更改。

部署到多个服务器:开发、生产、备份等。

我需要每个文件的最后一个(最高)修订号。

我的数组遵循以下代码段的格式。请注意,相同的文件列在元素 1、3、5 中,但具有不同的修订版本。我需要从中构建一个数组['filename(unique)']['last-revision']。我知道我可以使用蛮力循环并替换现有文件的修订号,如果它大于当前值。我的数据集的大小足够小,可以做到这一点没有问题。我只是要求社区提供更优雅的东西。

有什么建议吗? 数组片段下方是我目前的蛮力代码

[484680] => Array (
        [0] => Array (
                [revision] => 25924
                [file] => Array (
                  [0] => trunk/shq/includes/MysqLiClass/manageMstCash.PHP
                  [1] => trunk/shq/includes/forms/cash_report_for_clerk.PHP
                  ))
        [1] => Array (
                [revision] => 25923
                [file] => Array (
                   [0] => trunk/shq/includes/MysqLiClass/manageInvoiceLineItems.PHP
                 ))
        [3] => Array (
                [revision] => 25921
                [file] => Array (
                   [0] => trunk/shq/includes/MysqLiClass/manageInvoiceLineItems.PHP
                   ))
        [5] => Array (
                [revision] => 25919
                [file] => Array (
                   [0] => trunk/shq/includes/MysqLiClass/manageInvoiceLineItems.PHP
                   ))

...)

首刀蛮力最大修订分配:

foreach($cs as $repos) {
    foreach($repos as $repo) {
        foreach($repo['file'] as $file) {
            $x = $file;
            $rev = $repo['revision'];
            if(isset($afb[$x]['revision'])) { // we have existing revision for filename
                if ($rev > $afb[$x]['revision']) {
                    $afb[$x]['revision'] = $rev;
                    $afb[$x]['time'] = $repo['time'];
                } // no else - it's already set and the last revision
            } else { // $afb[filename] not set - create it
                $afb[$x]['revision'] = $rev;
                $afb[$x]['time'] = $repo['time'];
            }
        }
    } # end foreach repo
} # end foreach changeset

感谢您的意见!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)