php问题,尝试更改文件中的多个数字。 Str_replace替换所有内容,直到最大

时间:2019-05-26 13:09:26

标签: php str-replace

我正在尝试编写使文本文件中所有成绩提高+1的脚本。像0-> 1、1-> 2等。5级根本不应该增加,最好从0-5级开始。

问题是我的脚本给出了以下输出: 新成绩:

5
5
5
5
5
5

何时应给出: 新成绩:

1
5
2
4
3
5

似乎str_replace()搜索0,将其变为1,然后再次发现1,然后将其替换为2。...最后所有年级都为5。有没有办法做到这一点?每个年级只有一次?我尝试了preg_replace(),但它给出了错误:

  

PHP警告:preg_replace():分隔符不得为字母数字或反斜杠

这是我的剧本:

<?php
$file = 'grades.txt';
$file_contents = file_get_contents($file);

$fh = fopen($file, "w");
$file_contents = str_replace(['0','1','2','3','4'],['1','2','3','4','5'],$file_contents);

fwrite($fh, $file_contents);
fclose($fh);

echo "New grades:\n";
echo $file_contents;
?>

1 个答案:

答案 0 :(得分:1)

以相反的方式替换它-从最高到最低(而不是最低到最高)。这样,您将用5替换4,然后就没有4-接下来,您将3替换为4,依此类推-这样就没有重叠。

$file_contents = "1 2 3 4 5 4 5 2 1";
$result = str_replace(range(4, 0), range(5, 1), $file_contents);
echo $result;