Проблема PHP, пытаясь изменить несколько номеров в файле.Str_replace заменяет все до максимума - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь сделать скрипт, который увеличивает все оценки в текстовом файле на +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 Ответ

1 голос
/ 26 мая 2019

Замените его наоборот - от наивысшего к низшему (вместо наименьшего к наивысшему). Таким образом, вы замените 4 на 5, тогда не будет 4s - затем вы замените 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;
...