- 🟢 18:45 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
- #1
Прошу помочь найти ошибку в программке на PHP
программка должна выполнять поиск в строке подстроки, состоящей из нескольких слов (заранее количество слов неизвестно, но ограничиваю максимумом 5). Слова подстроки могут меняться местами, но результат поиска должен остаться неизменным.
пример:
исходная строка: "один два три четыре пять шесть семь восемь"
что хотелось получить: строка поиска "пять один три" => строка вывода = исходной строке.
т.е. все слова из строки поиска, независимо от порядка ввода, нашлись в исходной строке и значит её нужно вывести в результатах поиска.
если хоть одно слово в сроке поиска лишнее, то не выводить ничего.
как работает: не отфильтровывает строки, в которые не входят искомые слова. выводит просто первые 6 попавшихся результатов из загруженного файла.
подскажите пожалуйста где тут ошибка. или как надо было сделать по-другому...
Код:
<?php
$___notjson=1;
sleep( 0.05 );
if (empty($_GET['term'])) exit; // проверка есть ли что-либо в поле ввода, если нет - выход, если есть - продолжаем
$rss = simplexml_load_file('export.xml'); // загрузка списка строк, в которых искать соответствие
$q = mb_strtolower($_GET["term"],'UTF-8'); // строка запроса для поиска соответствия (Введенная строка в нижнем регистре)
if (get_magic_quotes_gpc()) $q = stripslashes($q);
$query = explode(" ", mb_strtolower($q,'UTF-8') , 5); // разделение строки запроса на отдельные слова, формируется массив из максимум 5 слов
$result = array(); // результат
// цикл перебирает все строки из загруженного файла
foreach ($rss->channel->item as $key) {
$namespaces = $key->getNameSpaces(true);
$g = $key->children($namespaces['g']);
$res=TRUE; // признак выводить или не выводить этот запрос в список результатов. сначала ставим true
for ($x=0; $x<count($query); $x++){
$res= $res and (stripos( mb_strtolower($key->title,'UTF-8'), mb_strtolower($query[$x],'UTF-8') ) !== false); // проверяем каждое слово на вхождение в исходную строку. Если все слова входят в строку, то признак $res останется True
}
// если $res остался true, то результат заносится в массив результатов и потом выводится на экран другими средствами
if ($res) {
array_push($result, array("label"=>"{$key->title}", "img"=>"{$g->image_link}", "price"=>"{$g->price}", "url"=>"{$key->link}"));
}
if (count($result) > 5) // выводить максимум 6 найденных результатов, при превышении работа прерывается
break;
}
echo json_encode($result);
?>
программка должна выполнять поиск в строке подстроки, состоящей из нескольких слов (заранее количество слов неизвестно, но ограничиваю максимумом 5). Слова подстроки могут меняться местами, но результат поиска должен остаться неизменным.
пример:
исходная строка: "один два три четыре пять шесть семь восемь"
что хотелось получить: строка поиска "пять один три" => строка вывода = исходной строке.
т.е. все слова из строки поиска, независимо от порядка ввода, нашлись в исходной строке и значит её нужно вывести в результатах поиска.
если хоть одно слово в сроке поиска лишнее, то не выводить ничего.
как работает: не отфильтровывает строки, в которые не входят искомые слова. выводит просто первые 6 попавшихся результатов из загруженного файла.
подскажите пожалуйста где тут ошибка. или как надо было сделать по-другому...
Останнє редагування: