替换php字符串序列号中的随机数(123..)


Replacing random numbers in a php string serial numbers(123...)

在PHP中,如何将包含随机字母和数字混合的字符串转换为包含序列号和随机数的字符串,而不改变它们在字符串中的位置?例如,

 $str_a = "1)Apple 5)Ball 3)Cat 8)Dog 4)Egg";

现在,我想把这个字符串转换成

$str_b = "1)Apple 2)Ball 3)Cat 4)Dog 5)Egg";

我想让数字1,5,3,8,4等于1,2,3,4,5

这应该可以为您工作:

仅使用preg_replace_callback()并将每个数字('d+ => 0-9尽可能多地)替换为递增的数字,例如

<?php
    $str_a = "1)Apple 5)Ball 3)Cat 8)Dog 4)Egg";
    $start = 1;
    echo $newStr = preg_replace_callback("/'d+/", function($m)use(&$start){
        return $start++;
    }, $str_a);
?>
输出:

1)Apple 2)Ball 3)Cat 4)Dog 5)Egg

创建的简单循环程序:

$str_a = "1)Apple 5)Ball 3)Cat 8)Dog 4)Egg";
function change($str_a) {
    $counter = 1;
    for($i=0; $i<strlen($str_a); $i++) {
        if(is_numeric($str_a[$i])) {
            $str_a[$i] = $counter++;
        }
    }
    return $str_a;
}
print(change($str_a))
输出:

1)苹果2)球3)猫4)狗5)蛋

您可以使用preg_split,然后将其以1递增进行连接。这也适用于由多个数字组成的数字:

$str_a = "51)Apple 675)Ball 334)Cat 84)Dog 904)Egg";
$a = preg_split('/'b'd+/', $str_a);
$str_b = '';
for($i=0,$c = count($a);$i<$c;$i++){
    if($i){
        $str_b .= $i.$a[$i];
    }
}
echo $str_b;
输出:

1)Apple 2)Ball 3)Cat 4)Dog 5)Egg