Str replace не соответствует определенным строкам - PullRequest
0 голосов
/ 24 июля 2011

У меня есть скрипт, который принимает какой-то пользовательский ввод, очищает его и пытается заменить значение в строке. Я обнаружил, что замена str, которую я использую, не может соответствовать, например. 11 +tum. Это почему? Могу ли я это как-то исправить? Управляет ли preg replace этим, и если да, то как это выглядит в preg replace?

Функция

Сценарий подготавливает строку ввода пользователя для полнотекстового запроса, все слова являются обязательными, поэтому каждый пробел заменяется пробелом +. Но некоторые фразы, такие как 11 tum, должны быть доступны для поиска и, следовательно, заключаться в двойные кавычки. Недостатком является то, что скрипт, кажется, не соответствует некоторым фразам, хотя эхосигнал повторяется до того, как сравнение показывает, что они одинаковы, например, 11 tum

Код:

//processedQuery e.g. 'laptop 11 tum'

$ processingQuery = str_replace ("", "+", $ processingQuery);

обработанный эхо-запрос; // разбирает ноутбук +11 + tum

foreach($commonQuery as $value){   //$commonQuery = array("11 tum", "13 tum", "15 tum", "17 tum", "asus eee", "asus 1005","asus 1010")

    //compile : simulated query format error
    $simulatedErrorValue = str_replace(" "," +",$value);

echo simulatedErrorValue; //parses 11 +tum

    $processedQuery = str_replace($simulatedErrorValue,'"'.$value.'"',$processedQuery);

}

echo $ processingQuery; // парсим ноутбук +11 + тум // обмениваем 11 tum на asus eee (другой commonQuery и последний эхо-запрос $ processingQuery показывают правильное значение laptop +"asus eee"

1 Ответ

0 голосов
/ 24 июля 2011

Вы путаете ввод с вашей функцией. Я получаю желаемый результат с небольшой модификацией:

11 +tum
laptop +"11 tum"
asus +eee
laptop +"11 tum"

Ваша ошибка в этой строке:

$commonQuery = array("11 tum, asus eee")

Это массив только с 1 членом.

Вы хотите изменить массив, чтобы иметь 2 члена:

$commonQuery = array("11 tum" , "asus eee");

Вот мой полный код:

<?php
$processedQuery = 'laptop 11 tum';
$processedQuery = str_replace(" "," +",$processedQuery);
$commonQuery = array("11 tum" , "asus eee");
foreach ( $commonQuery as $value ) {   //$commonQuery = array("11 tum, asus eee")
   //compile : simulated query format error
   $simulatedErrorValue = str_replace(" "," +",$value);
   echo "$simulatedErrorValue\n"; //parses 11 +tum
   $processedQuery = str_replace($simulatedErrorValue,'"'.$value.'"',$processedQuery);
   echo "$processedQuery\n";
}
?>
...