С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для VanUliK
14 / 14 / 3
Регистрация: 13.02.2012
Сообщений: 233
Записей в блоге: 1

Поисковый запрос

19.07.2016, 17:14. Показов 834. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется test.csv
Code
1
2
3
4
Example,luna,x2,1.0
Primer,zoloto,x8,1.2
Test1,serebro,o9,1.1
Test2,metall,x2,1
Необходимо сделать поисковый запрос из файла
Разложил в строку
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
        list($Name, $Price, $Number, $Nomer) = $data; 
         if ($Name == 'Test1') 
           {
            echo 'Name: ' . $Name . ' Price: ' . $Price . ' Number: ' . $Number. ' Nomer: ' . $Nomer, '<br>';
           }
    }
    fclose($handle);
}
?>
Как сделать поиск через форму, т.е. в строке
PHP
1
 if ($Name == 'Test1')
вместо Test1 прописывалось, то что пользователь вводит в форму поиска и поиск был не по строгому соответсвию?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.07.2016, 17:14
Ответы с готовыми решениями:

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

Как сделать поисковый робот?
Нужно сделать скрипт, который будет просматривать страницы в одном клике от главной. Казалось бы, это несложно - взять код главной и...

Поисковый робот и раскрывающиеся списки.
На сайте есть раскрывающийся список но я заметил что эти страницы в индекс поисковика не попадают. Я их добавил в sitemap но результата...

13
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
19.07.2016, 17:41
Как вариант.
PHP
1
2
3
4
5
6
7
8
9
10
11
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
        list($Name, $Price, $Number, $Nomer) = $data; 
        if (mb_strstr($Name, $_POST['имя_поля']))
            {
                echo 'Name: ' . $Name . ' Price: ' . $Price . ' Number: ' . $Number. ' Nomer: ' . $Nomer, '<br>';
            }
        else echo 'Совпадений не найдено';   
    }
    fclose($handle);
}
Добавлено через 2 минуты
Пример:
PHP
1
2
3
4
5
$str = ['sdfsdwerwer', 'qwezxc', '123123wer'];
foreach($str as $v)
if(mb_strstr($v, 'wer')) echo $v."\n";
//sdfsdwerwer
//123123wer
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.07.2016, 17:45
Например:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
# Получаем данные из формы
$search = isset($_POST['name']) ? $_POST['name'] : null;
 
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
        list($Name, $Price, $Number, $Nomer) = $data; 
        
        # Получаем схожесть строк в процентах
        similar_text($Name, $search, $percent);
        
        # Если схожесть не менее 80%
        if ($percent >= 80)
            echo 'Name: ' . $Name . ' Price: ' . $Price . ' Number: ' . $Number. ' Nomer: ' . $Nomer, '<br>';
    }
    
    fclose($handle);
}
Добавлено через 2 минуты
Правда не знаю, как similar_text с кириллицей работает.
1
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
19.07.2016, 19:02
по-моему тут банальный перебор строк + preg_match()
или даже preg_match_all() без перебора покажет сразу все строки
а уже потом эту найденную строку раскладывать и форматировать вывод
0
 Аватар для VanUliK
14 / 14 / 3
Регистрация: 13.02.2012
Сообщений: 233
Записей в блоге: 1
20.07.2016, 15:38  [ТС]
Para bellum, за решение спасибо, но как-то странно, при поиске Test1 выводит 2 строки (содержащие Test1 и Test2), но при написании с маленькой буквы test1, выводит только одну строку содержащую Test1. Какая-то ерунда с регистром получается.
И при поиске, хотел сделать, 'Совпадений не найдено' пишет 4 раза данную фразу, причем не важно, удовлетворены условия поиска или нет.
PHP
1
2
3
4
5
6
if (mb_strstr($Name, $_POST['имя_поля']))
            {
                echo 'Name: ' . $Name . ' Price: ' . $Price . ' Number: ' . $Number. ' Nomer: ' . $Nomer, '<br>';
            }
        else echo 'Совпадений не найдено';  
    }
А при варианте Пифагор
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if (($handle = fopen("test_.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        list($Name, $Price, $Number, $Nomer) = $data; 
        if (mb_strstr($Name, $_POST['find']))
            {
                echo ' Поле 1: ' . $Name . "<br>";
                echo ' Поле 2: ' . $Price . "<br>";
                echo ' Поле 3: ' . $Number. "<br>";
                echo ' Поле 4: ' . $Nomer, "<br>";
            }
        else echo 'Совпадений не найдено';  
    }
    fclose($handle);
}
?>
регистрозависим поиск (так же 4 раза пишет: "совпадений не найдено"), а при поиске пустой строки - ошибка
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
20.07.2016, 15:52
VanUliK, неужели в мануале сложно посмотреть??? Есть истина "Если есть put, значит есть и get".

mb_stristr() - Находит первое вхождение подстроки в строке без учета регистра.
Так же почитать про empty() и exit().
PHP
1
2
3
4
5
6
7
8
9
10
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
        list($Name, $Price, $Number, $Nomer) = $data; 
        if (!empty($_POST['имя_поля']) && mb_stristr($Name, $_POST['имя_поля']))
            {
                    echo 'Name: ' . $Name . ' Price: ' . $Price . ' Number: ' . $Number. ' Nomer: ' . $Nomer, '<br>';
            }
        else echo 'Совпадений не найдено';  exit();
    }
    fclose($handle);
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
20.07.2016, 16:34
Правда не знаю, как similar_text с кириллицей работает.
Цитата Сообщение от VanUliK Посмотреть сообщение
но как-то странно, при поиске Test1 выводит 2 строки (содержащие Test1 и Test2)
Так Вы же сами просили, чтобы поиск был не по точному совпадению?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
20.07.2016, 16:44
Цитата Сообщение от VanUliK Посмотреть сообщение
но как-то странно,
там все правильно - в условии задано разница не более 20% - для 5ти знаков это 1 символ
Заглавные и строчные считаются разными символами.
сравниваем:
'Test1' и 'Test1' - разница 0 - подходит
'Test1' и 'Test2' - разница 1 - подходит

'test1' и 'Test1' - разница 1 - подходит
'test1' и 'Test2' - разница 2 - ага, больше 20% - выкидываем.

Решение: приводите строки к одному регистру, если не нужно его учитывать
1
 Аватар для VanUliK
14 / 14 / 3
Регистрация: 13.02.2012
Сообщений: 233
Записей в блоге: 1
20.07.2016, 17:14  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Так Вы же сами просили, чтобы поиск был не по точному совпадению?
Возможно, я не правильно выразился.
Если в поиске написать Test1 - должно выдать строку содержащую только Test1, а если написать Test или даже est, то вывести должно все строки, содержащие данное сочетание.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
20.07.2016, 17:29
Тгла ищите сначала точное совпадение, а если не найдено -- уже similar_text используйте.
0
 Аватар для VanUliK
14 / 14 / 3
Регистрация: 13.02.2012
Сообщений: 233
Записей в блоге: 1
20.07.2016, 17:36  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Тгла ищите сначала точное совпадение, а если не найдено -- уже similar_text используйте
В варианте Пифагор'а, поиск происходит именно так, как мне хочется, но что-то побороть "Совпадений не найдено" не получается...
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
20.07.2016, 17:42
Что именно не получается? 4 раз продолжает выводить? Я же Вам написал, как сделать.
Вот простой пример
PHP
1
2
3
4
5
6
$str = ['sdfsdwerwer', 'qwezxc', '123123wer'];
foreach($str as $v){
    if(mb_strstr($v, '789')) echo $v."\n";
    else echo 'совпадений не найдено';//вариант без exit()
    //else echo 'совпадений не найдено'; exit();//вариант c exit()
}
http://sandbox.onlinephpfuncti... 8fd43594dd
Перейдите по ссылке и посмотрите, в чем разница.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
20.07.2016, 18:01
Добавьте вы уже счетчик совпадений и проверяйте его на 0 после окончания цикла...
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
20.07.2016, 23:15
PHP
1
2
3
4
5
<?php
$str = ['sdfsdwerwer', 'qwezxc', '123123wer'];
$post = "zxc";
$a = preg_grep("~$post~",$str);
echo count($a) ? "Совпадение найдено" : false;
http://sandbox.onlinephpfuncti... 125a989e93
PHP
1
2
3
4
$post = "Test1";
$a = preg_grep("~$post~",file("pr.csv"));
list($a,$b,$c,$d) = explode(",",implode($a));
echo "Name:$a Price: $b Number: $c Nomer: $d";
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2016, 23:15
Помогаю со студенческими работами здесь

Будет ли поисковый робот индексировать контент, который подгружается из БД?
Написал для тренировки блог, в котором все посты подгружаются из БД, будет ли поисковый робот читать и индексировать всю эту инфу?

Поисковый запрос к БД с UNION
Нужно, что бы поиск был по 2-м и более таблицам БД, таблицы не связаны. Делал множество разных вариантов, но все четно, помогите пожалуйста...

Поисковый запрос по нескольким столбцам
Пытался искать по форуму, вроде то, что мне нужно не нашел. Есть таблица, нужно осуществить по ней поиск, путем ввода запроса на сайте. С...

Поисковый запрос на сайте из базы данных
Создала на сайте поисковую строку и пытаюсь по слову, введенному в эту строку, найти статью из моей базы данных. Независимо от того, что...

Поисковый Запрос
Всем привет. Буду честен. В упор забыл как сравнить две даты в поисковом запросе. Query = {FORM = &quot;task&quot; &amp; Date= }&amp;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru