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

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

19.07.2016, 17:14. Показов 841. Ответов 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
Сообщений: 234
Записей в блоге: 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
Сообщений: 234
Записей в блоге: 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
Сообщений: 234
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru