Есть ли в php какие-либо строковые функции, которые меняют местами подстроки?

#php #string

#php #строка

Вопрос:

Я пишу приложение для геометрии, которое включает доказательства. Основной поток прямо сейчас заключается в том, что пользователь вводит ответ, и эта строка ответа сравнивается с «правильной» строкой ответа. Приложение сейчас находится на ранних стадиях, но я уже вижу, что некоторые функции приложения потребовали бы меньше кода, если бы я нашел правильную функцию php. Например, в многоступенчатом доказательстве предположим, что на одном шаге многоступенчатого геометрического доказательства ответ в базе данных:

 AB ≅ AC //(as AB amp;cong; AC)
  

PHP-файл, который обрабатывает это, обрезает все пробелы с помощью trim и str_replace . Пользователь, который вводит все следующее в качестве ответа, будет правильным:

 AB amp;cong; AC
ABamp;cong;AC
AB amp;cong;AC
ABamp;cong; AC
  

Однако, несмотря на то, что следующее было бы правильным в реальном мире, мой php-файл (изначально, до того, как я внес изменения) считал следующее «неправильным»:

 AC amp;cong; AB //and all permutations missing whitespace
  

Теперь я использую комбинацию strpos , stripos , strlen , и substr для учета асимметрии эквивалентных ответов (например, A= B совпадает с B = A ), но это добавляет много кода.

Есть ли в php какая-либо строковая функция, которая меняет местами подстроки. То есть, учитывая 2 строки следующим образом:

 $AnswerString1 = "ABamp;cong;AC";

$AnswerString2 = "ACamp;cong;AB";
  

существует ли какая-либо строковая функция php, которая гипотетически меняет местами подстроки следующим образом:

 $SwappedAnswerString2 = swap($AnswerString2, "AB", "AC");
  

такое, что теперь:

 $AnswerString1 = $SwappedAnswerString2;
  

?

Комментарии:

1. Разнесите () в массив amp;cong; , array_walk() или array_map() с помощью trim(), а затем отсортируйте?

2. Метод explode() звучит как хорошее предложение, потому что он не только допускает сортировку, но и если пользователь даже не вводит amp;cong; массив explode будет пустым, что послужит еще одной проверкой правильности ответа