如何解决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 举报,一经查实,本站将立刻删除。