Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как улучшить этот поиск?

17.05.2012, 06:54. Показов 1866. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
if (empty($_POST["what"]))
{
 $what="";
}
else
{
 $what=$_POST["what"];
}
if (empty($_POST["where"]))
{
 $where="";
}
else
{
 $where=$_POST["where"];
}
echo "<form action=\"\" method=\"post\">\n";
echo "Искать\n";
echo "<input name=\"what\" size=100>\n";
echo "<select name=\"where\">\n";
echo "<option value=\"body\">в тексте</option>\n";
echo "<option value=\"header\">в заголовках</option>\n";
echo "<option value=\"all\">везде</option>\n";
echo "</select>.<br>\n";
echo "<button>Искать</button>\n";
echo "</form>\n";
echo "<h1><center>Результат поиска</center></h1>\n";
$links=0;
if (($what!="")&($where!=""))
{
 mysql_connect("localhost", "admin", пароль);
 mysql_select_db("site");
 mysql_set_charset("cp1251");
 $site="codesite";
 $query="SELECT * FROM `page` INNER JOIN `site` ON `page`.`site`=`site`.`id` INNER JOIN `type` ON `page`.`type`=`type`.`id` WHERE (`site`.`site`='".$site."' AND `url`<>'INDEX' AND `url`<>'find') ORDER BY `url`;";
 $result=mysql_query($query);
 while ($row=mysql_fetch_array($result))
 {
  $link=$row["url"]."/";
  $type=$row["type"];
  $header=$row["header"];
  $body=$row["body"];
  $text="";
  switch ($type)
  {
   case "html": $text=$body;
   break;
   case "php" : $buffer = ob_get_contents();
                eval ($body);
                $text=$buffer;
                ob_end_clean();
   break;
  }
  $level=HeaderLevel($link);
  $flag=false;
  if (($where=="header")|($where=="all"))
  {
   $pos=strrpos(" ".$header, $what);
   if ($pos>0)
   {
    $flag=true;
   }
  }
  if (($where=="body")|($where=="all"))
  {
   $pos=strrpos(" ".$text, $what);
   if ($pos>0)
   {
    $flag=true;
   }
  }
  if ($flag)
  {
   $links++;
   echo "<h", $level, ">", "<a href=\"../", $link, "\">", $header, "</a></h", $level, ">\n";
  }
 }
}
if ($links==0)
{
 echo "<p>По Вашему запросу ничего не найдено.</p>\n";
}
Я хочу чтоб поиск имел, например, такое свойство: если буква большая, то её регистр учитывается, а если малая, то нет. То есть ('Б'=='Б')&&('Б'!='б'), но ('б'=='б')&&('б'=='Б').
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.05.2012, 06:54
Ответы с готовыми решениями:

Как улучшить этот код?
Код хорошего программиста чёткий, понятный, логичный, последовательный. Это видно с первого взгляда. Хорошего качества кода добиваются...

Как починить этот поиск?
Как починить этот поиск? Почему то не выводит не чего кроме того что ничего не найдено. &lt;? require_once...

Хочу улучшить свой поиск на сайте, исправить баг
Здравствуйте, у меня есть простой поиск на PHP, который ищет слова в базе данных&lt;?function search($words){ $arraywords =...

26
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.05.2012, 11:15
что это за извращение ?
PHP
1
2
3
4
5
$pos=strrpos(" ".$text, $what);
   if ($pos>0)
    $flag=true;
#...
if (strrpos($text, $what) !== FALSE ) $flag=true;
=== сравнивает еще и типы , и 0 !== false , в отличае от ==
Цитата Сообщение от taras atavin Посмотреть сообщение
если буква большая,
какаая буква ? сделайте галочку в поиске учитывать регистр , если она не нажат то сравнивайте strtolower(значение) и strtolower(искомое)
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.05.2012, 13:49  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
какаая буква ? сделайте галочку в поиске учитывать регистр , если она не нажат то сравнивайте strtolower(значение) и strtolower(искомое)
Тогда при поставленной галочке ("Оператор сдвига"!="оператор сдвига")&&("Оператор сдвига"!="оператор Сдвига")&&("Оператор сдвига"!="Оператор сдвига")&&("Оператор сдвига"=="Оператор Сдвига"), а при снятой
("Оператор сдвига"=="оператор сдвига")&&("Оператор сдвига"=="оператор Сдвига")&&("Оператор сдвига"=="Оператор сдвига")&&("Оператор сдвига"=="Оператор Сдвига"), а надо ("Оператор сдвига"!="оператор сдвига")&&("Оператор сдвига"!="оператор Сдвига")&&("Оператор сдвига"=="Оператор сдвига")&&("Оператор сдвига"=="Оператор Сдвига"). То есть для каждой буквы отдельно регистр должен учитываться, если она в образце большая и не учитываться, если малая. Это должен быть один поиск безо всяких галочек.

Добавлено через 1 минуту
Цитата Сообщение от crautcher Посмотреть сообщение
=== сравнивает еще и типы
А есть
PHP
1
!==
?
0
7 / 7 / 0
Регистрация: 15.05.2012
Сообщений: 81
17.05.2012, 14:05
Цитата Сообщение от taras atavin Посмотреть сообщение
Я хочу чтоб поиск имел, например, такое свойство: если буква большая, то её регистр учитывается, а если малая, то нет. То есть ('Б'=='Б')&&('Б'!='б'), но ('б'=='б')&&('б'=='Б').
такое условие, кажется, подойдет:
search_value == strtolower(real_value) || search_value == real_value

PS: честно, говоря твой код не читал sorry

Добавлено через 1 минуту
А есть
PHP
1
!==
?[/QUOTE]

есть. товарищ правильно говорит
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.05.2012, 15:53  [ТС]
Цитата Сообщение от neige-noir Посмотреть сообщение
search_value == strtolower(real_value) || search_value == real_value
Так строки сравниваются только целиком, а мне надо образец сопоставлять с подстроками.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.05.2012, 16:05
PHP
1
2
3
4
5
6
7
$a = 'some stupid text';
$b = 'SomE stupid TEXt';
 
echo 'строки равны с учетом регистра ' ;
var_dump( $a == $b );
echo '</br>строки равны без учетa регистра ' ;
var_dump(strtolower($a) == strtolower($b));
строки равны с учетом регистра bool(false)
строки равны без учетa регистра bool(true)


зачем сравнивать каждый символ ?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.05.2012, 16:32  [ТС]
PHP
1
2
3
4
5
echo "\$i=\"", $i, "\",<br>";
  echo "\$s=\"", $s, "\",<br>";
  echo "\$text=\"", $text, "\",<br>";
  echo "\$what=\"", $what, "\",<br>";
  echo "strtolower(\$s)=\"", strtolower($s), "\",<br>";
,
$i="0",
$s="Оператор",
$text="Операторы c++",
$what="оператор",
strtolower($s)="Оператор",
. Почему не преобразует?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.05.2012, 16:37
может вы работайте в утф ? тогда
PHP
1
mb_strtolower($s , 'UTF-8');
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.05.2012, 16:53  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
зачем сравнивать каждый символ ?
Я не собираюсь явно сравнивать каждый символ, я хочу реализовать такое условие. Когда равны строки? Когда попарно равны все их символы в совпадающих позициях. Так вот, задача: найти ссылки на страницы, в тексте которых есть хотя бы по одной подстроке, совпадающей с образцом, считая две различающиеся только регистром буквы текста и образца совпадающими, если буква нижнего регистра содержится в образце". Как вводится образец? Если юзверя не интересует регистр, то он и наберёт без учёта регистра, то есть нижним регистром, а если надо отдельно указать, что определённая буква должна быть набрана верхним регистром, то она и будет набрана верхним регистром. Наиболее естественный вариант. А вот зачем учитывать регистр всего образца?

Добавлено через 1 минуту
Цитата Сообщение от crautcher Посмотреть сообщение
может вы работайте в утф ? тогда
Нет, конечно. Читай:
Цитата Сообщение от taras atavin Посмотреть сообщение
PHP
1
mysql_set_charset("cp1251");
.
0
7 / 7 / 0
Регистрация: 15.05.2012
Сообщений: 81
17.05.2012, 17:03
Цитата Сообщение от taras atavin Посмотреть сообщение
Так строки сравниваются только целиком, а мне надо образец сопоставлять с подстроками.
используя этот принцип нужно идти дальше.
предполагая, что search_value - ключевое слово, небольшая строка, а real_value - здоровая статья, или типа того, в myqsl:
PHP
1
"WHERE (real_value LIKE '%$search_value%') OR (LOWER(real_value) LIKE '%$search_value%')"
или в пхп:
PHP
1
(strpos(strtolower(real_value),search_value)!==false || strpos(real_value,search_value)!==false)
короче решение затачивать надо индивидуально.
PS медленная зараза, конечно, но с извратом всегда так
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.05.2012, 17:11  [ТС]
И ещё,
HTML5
1
2
3
4
5
6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=windows-1251">
<head>
<title>Поиск по сайту</title>
</head>
Добавлено через 3 минуты
Цитата Сообщение от crautcher Посмотреть сообщение
может вы работайте в утф ? тогда
PHP
1
mb_strtolower($s , 'UTF-8');
А тесть функция преобразования в UTF-8?
0
7 / 7 / 0
Регистрация: 15.05.2012
Сообщений: 81
17.05.2012, 17:29
Цитата Сообщение от taras atavin Посмотреть сообщение
А тесть функция преобразования в UTF-8?
http://www.php.su/functions/?iconv
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.05.2012, 19:06  [ТС]
А код для неё для windows-1251?
0
7 / 7 / 0
Регистрация: 15.05.2012
Сообщений: 81
18.05.2012, 10:02
Цитата Сообщение от taras atavin Посмотреть сообщение
А код для неё для windows-1251?
не понял
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.05.2012, 10:58  [ТС]
Что непонятного то? Или думаешь, что
PHP
1
echo iconv("KOI8-U", "UTF-8", "Пора переходить на юникод.");
справится без изменения и с windows-1251?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
18.05.2012, 11:06
какойто тупизм выходит , вы ведите нить диалога , а то смотрите на последний комент вырванный из контекста и отвечаете на него
mb_strtolower($s , 'UTF-8');
возвращает тоже что и strtolower() , только в нужной кодировке - второй параметр . никакие iconv тут не нужны

если тупят функции работы с текстом , юзаются функции с приставкой mb_ , подаётся кодировка , и тогда все работает
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.05.2012, 11:11  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
if (empty($_POST["what"]))
{
 $what="";
}
else
{
 $what=$_POST["what"];
}
if (empty($_POST["where"]))
{
 $where="";
}
else
{
 $where=$_POST["where"];
}
echo "<form action=\"\" method=\"post\">\n";
echo "Искать\n";
echo "<input name=\"what\" size=100>\n";
echo "<select name=\"where\">\n";
echo "<option value=\"body\">в тексте</option>\n";
echo "<option value=\"header\">в заголовках</option>\n";
echo "<option value=\"all\">везде</option>\n";
echo "</select>.<br>\n";
echo "<button>Искать</button>\n";
echo "</form>\n";
echo "<h1><center>Результат поиска</center></h1>\n";
$links=0;
if (($what!=="")&($where!==""))
{
 mysql_connect("localhost", "admin", пароль);
 mysql_select_db("site");
 mysql_set_charset("cp1251");
 $site="codesite";
 $query="SELECT * FROM `page` INNER JOIN `site` ON `page`.`site`=`site`.`id` INNER JOIN `type` ON `page`.`type`=`type`.`id` WHERE (`site`.`site`='".$site."' AND `url`<>'INDEX' AND `url`<>'find') ORDER BY `url`;";
 $result=mysql_query($query);
 while ($row=mysql_fetch_array($result))
 {
  $link=$row["url"]."/";
  $type=$row["type"];
  $header=$row["header"];
  $body=$row["body"];
  $text="";
  switch ($type)
  {
   case "html": $text=$body;
   break;
   case "php" : $buffer = ob_get_contents();
                eval ($body);
                $text=$buffer;
                ob_end_clean();
   break;
  }
  $level=HeaderLevel($link);
  $flag=false;
  if (($where==="header")||($where==="all"))
  {
   if (MyCompare($what, $header))
   {
    $flag=true;
   }
  }
  if (($where==="body")||($where==="all"))
  {
   if (MyCompare($what, $text))
   {
    $flag=true;
   }
  }
  if ($flag)
  {
   $links++;
   echo "<h", $level, ">", "<a href=\"../", $link, "\">", $header, "</a></h", $level, ">\n";
  }
 }
}
function MyCompare($what, $text)
{
 $lw=strlen($what);
 $lt=strlen($text);
 $dl=$lt-$lw;
 for ($i=0; $i<=$dl; $i++)
 {
  $s1=substr($text, $i, $lw);
  $s2=mb_strtolower($s1, "CP1251");
  if (($what==$s1)||($what==$s2))
  {
   return true;
  }
 }
 return false;
}
if ($links===0)
{
 echo "<p>По Вашему запросу ничего не найдено.</p>\n";
}
.
Что ещё можно улучшить в этом поиске?
0
 Аватар для AnTro.Net
131 / 127 / 50
Регистрация: 28.04.2010
Сообщений: 928
19.05.2012, 15:32
лично я бы советовал на будующее так не делать

PHP
1
2
3
4
5
6
7
8
9
10
11
echo "<form action=\"\" method=\"post\">\n";
echo "Искать\n";
echo "<input name=\"what\" size=100>\n";
echo "<select name=\"where\">\n";
echo "<option value=\"body\">в тексте</option>\n";
echo "<option value=\"header\">в заголовках</option>\n";
echo "<option value=\"all\">везде</option>\n";
echo "</select>.<br>\n";
echo "<button>Искать</button>\n";
echo "</form>\n";
echo "<h1><center>Результат поиска</center></h1>\n";
а вот так делать

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$TEXT =<<<HTML
<form action="" method="post">
Искать
<input name="what" size=100>
<select name="where">
<option value="body">в тексте</option>
<option value="header">в заголовках</option>
<option value="all">везде</option>
</select><br>
<button>Искать</button>
</form>
<h1><center>Результат поиска</center></h1>
HTML;
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.05.2012, 18:42  [ТС]
И как это читать?
0
 Аватар для AnTro.Net
131 / 127 / 50
Регистрация: 28.04.2010
Сообщений: 928
20.05.2012, 22:03
taras atavin, кому вопрос?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2012, 22:03
Помогаю со студенческими работами здесь

Можно ли как то улучшить этот компьютер?
motherboard -NVIDIA nForce2 A7N8x-X процессор-Amd Athlon(tm) Видеокарта-Radeon 9200 PRO Famely память-512RAM Можно ли его...

Как можно улучшить этот компьютер?
процессор Intel Core i5-2310 2.9GH,видеокарта GeForce GTX 560 Ti,озу 8 Гб,блок питания 650w,жесткий диск 1 Тб

Как можно улучшить этот код?
Как можно улучшить этот код, чтобы каждый раз не писать каждый раз all.SetActive(false), а можно было просто сделать это со всем массивом ...

Как можно улучшить этот компьютер
я в компьютерах 0 подскажите как можно улучшить такой компьютер AMD Phenom II X4 965 3.40 GHz, ОЗУ 4 Гб,GeForce GTX 560 Ti,блок питания...

Как улучшить этот скрипт перетаскивания объекта?
Написал скрипт, который перетаскивает объект. Но в 15 и 16 строчке JavaScript явно указано, какой объект надо перетаскивать. Мне надо...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru