Я работаю над сценарием, который позволяет студентам вводить свои ответы в форму и дает им мгновенную обратную связь по своим ответам.
Я начинаю со строки ($ content), которая содержит завершенную задачу с пробелами в квадратных скобках, примерно так:
There's [somebody] in the room. There isn't [anybody] in the room.
Is [anybody] in the room?
Теперь скрипт распознает решения (кто-нибудь, кто-нибудь, кто-нибудь) и сохраняет их в массиве. Ответы студента также в массиве.
Чтобы проверить, верен ли ответ, скрипт проверяет, идентичны ли $ input [$ i] и $ solution [$ i].
Теперь вот проблема: я хочу, чтобы скрипт заменил заполнители на поле ввода, где решение неверное, и решение зеленым, если оно правильное. Эта обновленная версия $ content будет показана на следующей странице.
Но если есть два идентичных решения, это приводит к множественным заменам, поскольку замена заменяется снова ...
Я пробовал preg_replace с лимитом 1, но это тоже не помогает, так как не пропускает решения, которые уже были заменены.
$i=0;
while ($solution[$i]){
//answer correct
if($solution[$i] == $input[$i]){
//replace placeholder > green solution
$content = str_replace($solution[$i], $solution_green[$i], $content);
}
//answer wrong
else{
//replace placeholder > input box to try again
$content = str_replace($solution[$i], $solution_box[$i], $content);
}
$i++;
}
print $content; //Output new form based on student's answer
Есть ли способ избежать замены замен?
Надеюсь, я не слишком много болтал ... Я долго ломал голову над этой проблемой и был бы рад любым советам.