PHP - 检查数组中的重复项并更新循环中的重复值

标签 php arrays regex

$mymarker = '/MARKER[0-9]{2}/';
preg_match_all($mymarker, $mycontent, $matches);
var_dump($matches);

给予:

array(1) {
  [0]=>
  array(18) {
    [0]=>
    string(8) "MARKER00"
    [1]=>
    string(8) "MARKER01"
    [2]=>
    string(8) "MARKER02"
    [3]=>
    string(8) "MARKER04"
    [4]=>
    string(8) "MARKER05"
    [5]=>
    string(8) "MARKER07"
    [6]=>
    string(8) "MARKER09"
    [7]=>
    string(8) "MARKER13"
    [8]=>
    string(8) "MARKER13"
    [9]=>
    string(8) "MARKER16"
    [10]=>
    string(8) "MARKER15"
    [11]=>
    string(8) "MARKER21"
    [12]=>
    string(8) "MARKER31"
    [13]=>
    string(8) "MARKER22"
    [14]=>
    string(8) "MARKER24"
    [15]=>
    string(8) "MARKER26"
    [16]=>
    string(8) "MARKER80"
    [17]=>
    string(8) "MARKER81"
  }
}

正如我们所见,MARKER13 出现了两次。 MARKER05、MARKER07 和 MARKER13 可能会出现此重复实例。

需要将第二个值更新为 MARKERXX+1,以便 第二次出现:

Marker05 必须更新为 MARKER06 Marker07 必须更新为 MARKER08 MARKER13 必须更新为 MARKER14。

我们如何在循环中进行设置,以检查重复并将重复值更新为下一个值。

谢谢

最佳答案

可能有更简单的方法,但您可以想出以下方法

<?php
$matches = array("MARKER00","MARKER01","MARKER02","MARKER04","MARKER05","MARKER07","MARKER09","MARKER13","MARKER13","MARKER16","MARKER15","MARKER21","MARKER31","MARKER22","MARKER24","MARKER26","MARKER80","MARKER81");

$duplicates = array("MARKER05", "MARKER07", "MARKER13");
$len = count($matches);

for ($i=0;$i<$len;$i++) {
    $marker = $matches[$i];

    if (in_array($marker, $duplicates)) {
        // one of our markers
        // check if the next is the same
        // if so update it
        if ($i<$len-1) {
            if ($marker == $matches[$i+1]) {
                # split the string into a letter and a digit part
                # with lookarounds (behind/ahead, both positive)
                list($text,$number) = preg_split('~(?<=[A-Z])(?=\d)~', $matches[$i+1]);
                $number = intval($number);
                # increase the intval'd number by one
                # and apply it to the original array
                $number += 1;
                $matches[$i+1] = $text . $number;
            }
        }
    }
}

print_r($matches);
// updated to MARKER14

?>

显然,只有当数组有序时,这才有效,即重复的后续。

关于PHP - 检查数组中的重复项并更新循环中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35533371/

相关文章:

javascript - 如何减少从 PHP 获取信息的带宽大小?

javascript - 如何为自动登录 Cacti 多次发布 PHP 表单 onload?

php - 生成面包屑的递归函数

javascript - 将数组数组转换为对象数组的有效方法

ios - 数据不会保存到桌面

python - 查找数学表达式中最外层括号内包含的文本

php - mysql 日期时间在 php 页面上显示不同

php - 一个逗号空格

python - 在 re.sub 中使用变量名

PHP 多维数组 foreach