Постійний збір на дрони FPV для ЗСУ
Закидуй дві гривні!
FPV-дрони змінюють хід війни
Змінюй хід війни!

PHP поиск по массиву.

🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 29.07.2007
Повідом.: 326
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
PHP поиск по массиву.

Вопрос следующего характера:
Делаю поиск.
вот код поиска. Файл 33.csv содержит каталожные номера с ценами и названиями.
Имеется форма поиска в которую вводится искомый номер детали.
Проблема:
- запчасти записаны в файле так(338 215 659 V или 2.157-268.2 или LMY259):: если вводить в поле поиска точно так же как записано, то ищет без проблем, но если не поставить точку или написать без пробелов или забыть какую-то букву добавить - то ничего не найдёт.
С пробелами в конце и в начале я разобрался и с большими и маленькими буквами вроде тоже. Но это не могу побороть никак. Может у кого есть какие идеи что нужно дописать(мне кажется шаблон или правило какое-то нужно дописать а вот куда и какое не пойму). В инете не могу найти решение, может неправильно задаю вопрос....
PHP:
<?php
    $handle = fopen("33.csv", "r");
    echo "<center><table width=40% border=1 cellspacing=0 cellpadding=2>";
    echo "<caption>Наличие запчастей на складе</caption>";
    echo "<tr><td>Оригинальный №</td><td>Неоригинальный №</td><td>Наименование</td><td>Производитель</td><td>Цена</td></tr>";
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        echo "<tr>";
        foreach($data as $value) {         
            if(in_array((strtoupper(trim($_REQUEST['number']))), $data)){
                 //проверка. введены ли данные в поле поиска
                 if (!empty($_REQUEST['number'])and isset($_REQUEST['number'])){             
                     echo "<td>$value</td>"; //если введены данные, выдать найденый результат
                 } else {
                     exit("<br><h2><font color=red>Вы ничего не ввели </font></h2><br /><br />"); //если ничего не ввели в поле поиска
                 }
 
             }
              
        }
        echo "</tr>";
   }
   echo "</table></center>";
   fclose($handle);
?>
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
перебирай элементы массива в цикле и ищи совпадение как тебе надо.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
перебирай элементы массива в цикле и ищи совпадение как тебе надо.
А это что по твоему:
PHP:
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        echo "<tr>";
        foreach($data as $value) {
Лизание яиц?

ТС, кури слова "регулярные выражения". Тогда сможешь искать нечеткие соответствия.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
А это что по твоему:
PHP:
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        echo "<tr>";
        foreach($data as $value) {
Лизание яиц?

оно самое. я вообще не понимаю, зачем сейчас нужен вложенный цикл.

ТС, кури слова "регулярные выражения". Тогда сможешь искать нечеткие соответствия.

ты ему еще кодировку поменять посоветуй.
достаточно подрезать строки до одной длинны и сравнить.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
о регулярных выражениях я думал... но мне кажется это гемор ещё тот...
достаточно подрезать строки до одной длинны и сравнить.
а можно примерчик какой-нибудь для моего случая чтоб я попробовал понять как мне это использовать?
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
о регулярных выражениях я думал... но мне кажется это гемор ещё тот...

а можно примерчик какой-нибудь для моего случая чтоб я попробовал понять как мне это использовать?
У двух сравниваемых строк определяешь длину, из них выбираешь наименьшую и её подставляешь в функцию сравнения строк.
В пых-пыхе я не спец, забыл уже его.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
может еще за Вас курсовую написать?

я не прошу за меня ничего писать просто подскажите и я пробовать сам далее буду.

Написал регулярное выражение для моего поиска, но не врублюсь как его у меня применить :)
вот оно:
PHP:
$request_number = '358 659 251 B';
    if (preg_match('/^([\w|\d\W]{1,4})\s*[\w|\d\W]{3,5}\s*([\d]{3}\s*)*([\w\d]{1,})*\s*([\w\d]{1,})*$/si', $request_number, $requested)) {  
        $result = $requested[0];
        echo "Номер найден. " . $result;  
    } else {  
        $result = ""; 
        echo "Номер не найден. " . $result; 
    }

как бы это глупо не звучало не пойму куда его подставить что оно в моём случае работало. А так работает.

в сравнение строк я вообще невкурил... :(
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9
оно самое. я вообще не понимаю, зачем сейчас нужен вложенный цикл.
Тільки зареєстровані користувачі бачать весь контент у цьому розділі

Там в конце даже пример есть. Как раз с вложенным циклом. Иди понимай.

Написал регулярное выражение для моего поиска, но не врублюсь как его у меня применить :)
О майн готт! Даже не надейся, что кто-то будет вникать в эту регулярку, рожденную твоим несомнено гениальным, но несколько сумрачным подсознанием :)

У двух сравниваемых строк определяешь длину, из них выбираешь наименьшую и её подставляешь в функцию сравнения строк.
Это мощная идея. Особенно в случае, когда кто-то "не поставил точку или написал без пробелов". Новая страница... новая глава... да чего уж там, новая эпоха в алгоритмах поиска. Просто взять строку меньшей длины.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10
О майн готт! Даже не надейся, что кто-то будет вникать в эту регулярку, рожденную твоим несомнено гениальным, но несколько сумрачным подсознанием :)
не не, я не прошу его проверять на правильность, а просто помогите мне подставить в мой пример .... я не пойму куда эту маску ставить.

как я понимаю мне надо сравнить одну строку с другой через шаблон.......но как это провернуть???
 
Останнє редагування:
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
Вам нужна двухходовка.
1) Парсите введенную строку на группы цифр/группы символов и прочие значащие литералы, из которых должен состоять валидный номер. Делаете это опять же регуляркой, если еще не разобрались - захват делатеся скобочками.
2) Из кусочков пункта 1 составляете вторую регулярку (опять же читайте, в теле регулярки могут быть переменные, они отлично "раскрываются"), через которую прогоняете все имеющиеся у Вас в каталоге номера.

Перед всеми этими танцами с бубном не забудьте проверить четкое соответствие (то что сейчас у Вас работает) - вдруг юзер не ошибся при вводе ;)

Ну есть еще вариант - удаляете той же регуляркой из введенной строки и из всех каталожных номеров незначащие символы (пробелы, точки, дефисы и так далее) и потом ищете точное соответствие обычным сравнением.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
..удаляете той же регуляркой из введенной строки и из всех каталожных номеров незначащие символы (пробелы, точки, дефисы и так далее) и потом ищете точное соответствие обычным сравнением.
Очень даже может быть, только стоит зарание проверить каталожные номера на совпадение после подобных манипуляций.
НО! Имхо при подобной постановке задача не имеет решения.

ТСу стоит подумать не о попытке угадать, что введет пользователь. Поверь, это из области фантастики.
Тебе нужно сразу выдавать список подходящих артикулов по фильтру вводимых символов. После введения первого "левого" символа список будет пуст. Можешь вставить сообщение шо он баран ;)
 
Останнє редагування:
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13
Тільки зареєстровані користувачі бачать весь контент у цьому розділі

Там в конце даже пример есть. Как раз с вложенным циклом. Иди понимай.

и чо? тупо списываем с примера, не думая зачем оно, да? так сказать BFG way.

Это мощная идея. Особенно в случае, когда кто-то "не поставил точку или написал без пробелов". Новая страница... новая глава... да чего уж там, новая эпоха в алгоритмах поиска.

точки и пробелы с утра тоже удалялись без помощи регулярных выражений.
пусть ТС сначала хотя бы недописанную букву осилит.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #14
Вам нужна двухходовка.
1) Парсите введенную строку на группы цифр/группы символов и прочие значащие литералы, из которых должен состоять валидный номер. Делаете это опять же регуляркой, если еще не разобрались - захват делатеся скобочками.
2) Из кусочков пункта 1 составляете вторую регулярку (опять же читайте, в теле регулярки могут быть переменные, они отлично "раскрываются"), через которую прогоняете все имеющиеся у Вас в каталоге номера.

Перед всеми этими танцами с бубном не забудьте проверить четкое соответствие (то что сейчас у Вас работает) - вдруг юзер не ошибся при вводе ;)

буду пробовать осилить

Тебе нужно сразу выдавать список подходящих артикулов по фильтру вводимых символов. После введения первого "левого" символа список будет пуст. Можешь вставить сообщение шо он баран ;)
это был бы очень хороший вариант! Но это наверное AJAX?
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #15
и чо? тупо списываем с примера, не думая зачем оно, да? так сказать BFG way.
Я понял, мануал по ПХП писали лохи. Вполне ожидаемое заявление от такого клоуна как ты.
Чтобы не быть голословным - напиши без вложенных циклов чтение CSV файла, парсинг на поля и потом проверку каждого поля.

точки и пробелы с утра тоже удалялись без помощи регулярных выражений.
Я понимаю, подобные решения очень подходят тем, кто оргазм по утрам получает без помощи женщины :D

Очень даже может быть, только стоит зарание проверить каталожные номера на совпадение после подобных манипуляций.
НО! Имхо при подобной постановке задача не имеет решения.
Это почему не имеет? Почистили мусорные симоволы, прогнали через сравнение, нашли пусть даже несколько штук совпадений, предъявили юзеру - и пусть он конкретно выбирает.
Решение с поиском по мере ввода символов конечно хорошее - но ИМХо не справится ТС с эффективной реализацией такой задачи, там не все просто.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #16
...Это почему не имеет? ..

Ограничить пользователя почти всегда проще, чем пытаться предугадать полет его фантазии. Да и ради чего?

...Почистили мусорные симоволы, прогнали через сравнение, нашли пусть даже несколько штук совпадений, предъявили юзеру - и пусть он конкретно выбирает..
Почистили мусорные симоволы , прогнали через сравнение уже набранное выражение, нашли пусть даже несколько штук совпадений /не нашли, предъявили юзеру /назвали бараном;)) - и пусть он конкретно выбирает или редактирует набранное. Пока таки не выберет.
 
Останнє редагування:
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #17
Я понял, мануал по ПХП писали лохи. Вполне ожидаемое заявление от такого клоуна как ты.
Чтобы не быть голословным - напиши без вложенных циклов чтение CSV файла, парсинг на поля и потом проверку каждого поля.

где ты в оригинальном коде ТС увидел "проверку каждого поля"? )))
лучше расскажи нам, какое астральное предназначение там выполняет вложенный цикл. давай, жги нас напалмом.

Я понимаю, подобные решения очень подходят тем, кто оргазм по утрам получает без помощи женщины :D
а ты поди и шнурки завязать без помощи женщины не можешь?

это был бы очень хороший вариант! Но это наверное AJAX?

не обязательно. список всех вариантов, если он небольшой, можно положить в массивчик и подсунуть в жабаскрипт через json_encode.
причем, это практически и все, что требуется от прикладного программиста:
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #18
Почистили мусорные симоволы , прогнали через сравнение уже набранное выражение, нашли пусть даже несколько штук совпадений /не нашли, предъявили юзеру /назвали бараном;)) - и пусть он конкретно выбирает или редактирует набранное. Пока таки не выберет.
Я же сделал ясную приписку - не справится ТС с реализацией этого. Аджакс для человека, которые путается в обработке массивов...

где ты в оригинальном коде ТС увидел "проверку каждого поля"? )))
лучше расскажи нам, какое назначение там выполняет вложенный цикл. давай, жги.
Вложенный цикл там как раз перебирает все поля. То что ТС не пользуется его результатами - не значит что его быть не должно.
Впрочем твой слив защитан. Предъявить код без вложенных циклов ты не в состоянии, в состоянии только газифицировать лужи.
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #19
Вложенный цикл там как раз перебирает все поля. То что ТС не пользуется его результатами - не значит что его быть не должно.
короче он не делает ниГУЯ. что тебе мешает так и писать не знаю, может средняя зарплата?

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

отчего же. вот тебе код из мануала, переписанный без вложенного цикла. обосрись и умри)))

Код:
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        array_walk($data, function($val) {
            echo "{$val}<br />\n"    
        });
    }
    fclose($handle);
}
 
  • 🟡 05:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #20
отчего же. вот тебе код из мануала, переписанный без вложенного цикла. обосрись и умри)))
И впрям сказочный... Ты наверное думаешь, что внутри эррэй_волк-а нет цикла, да? Что там маленькие человечки вдоль массива бегают туда-сюда? :D
Ну тогда не мелочись, чего уж там, напиши сразу:

$num=count($data);
$i = 0;
xxx:
if ($i => $num) goto zzz;
echo $data[$i];
$i++;
goto xxx;
zzz:

В твоем сказочном мире это тоже не цикл, верно?
 
Назад
Зверху Знизу