Хорошо, сейчас я пытаюсь расширить часть кода, который я здесь разрешил ранее.
Этот код ниже назначает фразу, введенную в поле поиска, и пытается сделать следующее:
1) вычистить то, что мне там не нужно (ПРИМЕЧАНИЕ: вход предварительно обработан, поэтому я просто пока еще не закончил и продолжаю работать над этой частью).
2) разбить фразу на отдельные слова, используя пробелы в качестве разделителя
3) проверьте каждое отдельное слово, извлеченное, чтобы увидеть, существует ли * в первых 3 символах, и, если это так, прервать процесс
4) проверьте, используются ли слова «и» или «или» - если да, примените их без изменений - если нет, то добавьте «и» к фразе. (Конечное преобразование фразы в фразу «и» автоматически, если пользователь не указал ее самостоятельно).
5) На протяжении всего процесса реконструируется ключевое слово $, и в конце я повторяю последнее, новое ключевое слово $, чтобы проверить результат ... конечно же, после этого нового кода следует больше кода.
if ($keyword) {
$clean = preg_replace('/[^a-zA-Z0-9 *_&]/','',$keyword);
$token = strtok($clean, " ");
$keyword = $token;
while ($token !== false) {
$pos = stripos($token, "*");
if ($pos < 3 && $pos !== false) {
return;
}
$token = strtok(" ");
if ($token == "and" || $token == "or") {
$keyword = $keyword . " " . $token;
} elseif ($token) {
$keyword = $keyword . " and " . $token;
}
}
echo $keyword;
ПРОБЛЕМА:
Все работает нормально, за исключением того, что оператор ELSEIF ВСЕГДА ИСТИНЕН ?! Независимо от того, что я делаю, вставляются дополнительные «и», независимо от того, является ли приведенное выше утверждение if верным или нет. Я проверил, что первоначальный оператор if работает, он определяет, существует ли «и», или «или», и применяет его соответствующим образом ... но затем он все равно обрабатывает ELSEIF !! Я даже зашел так далеко, что пытался:
elseif ($token !== "and" && $token !== "or" && $token !== false)
Но, в конце концов, получающаяся фраза заканчивается на «и и или или» или и, независимо от того.
(Примечание: я понимаю, что есть лучшие варианты, чем preg_replace, но я рассмотрю это в другой раз - поэтому для этого вопроса я просто пытаюсь разрешить дилемму ELSEIF, спасибо)
ПРИЛОЖЕНИЕ МОДОВ На основе ответов ...
Итак, я изменил код на ...
$token = strtok(" ");
if (in_array($token, array( 'and', 'or' ))) {
$keyword = $keyword . " " . $token;
} elseif (!empty($token)) {
$keyword = $keyword . " and " . $token;
}
Но результаты все еще неверны. Например:
"белый футбольный шлем" становится "белым и футбол и шлем",
тем не мение...
"белый и футбол и хельмут" становится "белым и футбол и хельмут".
Я просто не понимаю, как ifelse может обрабатывать, если if - true ??
Примечание. Чтобы убедиться, что часть IF работает, я поставил в этом выражении x:
if (in_array($token, array( 'and', 'or' ))) {
$keyword = $keyword . " x" . $token;
А "белый и футбол и хельмут" приводит к "белый и Xand и футбольный хэнд и helmut". Кроме того, «белый и футбольный хельмут» (не 2-й и) приводит к «белым хэнд и футбол и хельмут». !! Итак, оператор IF обрабатывается, как и ожидалось - только не ELSEIF !!