좋아, 이제 이전에 여기서 해결 한 코드를 확장하려고합니다. 아래 코드는 검색 창에 입력 한 문구를 할당하고 다음을 시도합니다. 1) 내가 원하지 않는 내용을 정리합니다 (참고 : 입력이 사전 처리되어 더 많은 내용을 처리하고 있습니다. 지금,이 부분에서 계속 작업하고 있습니다). 2) 분리 기호로 공백을 사용하여 개별 단어로 구문을 분리하십시오. 3) 추출 된 각 개별 단어를 확인하여 첫 3 자 안에 a *가 있는지 확인하십시오. 그렇다면 프로세스를 중단하십시오. 4) 단어 "and "또는"or "가 사용 된 경우 수정없이 적용하십시오. 그렇지 않으면 구문에"and "를 삽입하십시오. (궁극적으로 사용자가 직접 지정하지 않으면 구문을 자동으로 "and"구문으로 변환합니다. 5) 프로세스 전체에서 $ 키워드가 재구성되고 결과적으로 최종 $ new 키워드가 에코됩니다. 물론 새로운 키워드를 사용하면 더 많은 코드가 생성됩니다.PHP Ifelse 문이 참이 아닌 경우
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 문은 항상 TRUE입니다 몇 가지 이유를 제외하고 잘 작동! 내가하는 일과 상관없이 위의 if 문이 true인지 아닌지에 관계없이 추가 'and'가 삽입됩니다. 초기 if 문이 작동하는지 확인한 후 'and'or 'or'가 있는지 여부를 감지하여 적절하게 적용하는지 확인한 다음 어쨌든 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;
}
을 응답에 기반 MODS를 추가하지만 결과는 여전히 올바르지 않습니다. 예 :
"white football helmut"은 "white and football and helmut"이됩니다. 그러나 "white and football and helmut"은 "white and and football and helmut"이됩니다.
나는 ifelse가 처리 될 수있는 방법을 알지 못한다.
참고 : IF 부분이 작동하는지 확인하려면, 그 문에 X 배치 : "흰색 xand 축구 xand와 헬무트"에
if (in_array($token, array('and', 'or'))) {
$keyword = $keyword . " x" . $token;
그리고 "흰색과 축구와 헬무트"결과. 또한, "백인과 축구 헬무트"(2 위와 2 위 없음) 결과는 "백인과 축구와 헬무트"입니다. !! !! 따라서 IF 문은 예상대로 처리됩니다. ELSEIF가 아닙니다!
그냥 두 번째'/'앞의 정규식에서 닫는']'을 놓친 것 같습니다. –
좋은 캐치 - 실제 코드에는 더 많은 정보가 있었지만 진행중인 작업 이었기 때문에이 메시지에서 대부분 제거되었습니다. 실수로이 코드를 잘라 냈습니다. 이제 다시 돌아 왔습니다 .-) 감사합니다. – Soyo