Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сложить два массива?
 
 автор: sega_z   (06.09.2011 в 17:57)   письмо автору
 
 

Есть созданные из б.д. массивы:


$result = mysql_query("SELECT * FROM doska ORDER BY id DESC",$db);
$myrow = mysql_fetch_array ($result);

$str2 = $myrow['text_obyavl']; // Первый массив
$str2 = strtolower($str2); // Приводим все символы к нижнему регистру
$a1 = explode(" ",$str2); // Заносим слова в массив

$str3 = $myrow['zagolovok']; // Второй массив
$str3 = strtolower($str3); // Приводим все символы к нижнему регистру
$a2 = explode(" ",$str3); // Заносим слова в массив


Можно ли создать массив $a который содержит все значения $a1 и $a2?

  Ответить  
 
 автор: sl1p   (06.09.2011 в 18:28)   письмо автору
 
   для: sega_z   (06.09.2011 в 17:57)
 

$a = array_merge($a1, $a2);

  Ответить  
 
 автор: sega_z   (06.09.2011 в 19:00)   письмо автору
 
   для: sl1p   (06.09.2011 в 18:28)
 

Спасибо, всё верно!!!

А можно как нибудь сделать, чтобы из массива $a выводились только уникальные значения?


for($i = 0; $i < count($a); $i++)
{
echo $a[$i];
}

  Ответить  
 
 автор: cheops   (06.09.2011 в 19:25)   письмо автору
 
   для: sega_z   (06.09.2011 в 19:00)
 

Для этого его можно пропустить через функцию array_unique(), которая возвращает массив уникальных элементов для текущего массива.
$a = array_unique($a);
for($i = 0; $i < count($a); $i++) 

echo $a[$i]; 
}

  Ответить  
 
 автор: sega_z   (06.09.2011 в 19:47)   письмо автору
 
   для: cheops   (06.09.2011 в 19:25)
 

Все понятно, спасибо!

А как сделать вывод оператором "echo" или "printf ()" только уникального значения переменной?
Т.е. чтобы указанные операторы не выводили одно и тоже значение два раза.

  Ответить  
 
 автор: cheops   (06.09.2011 в 19:49)   письмо автору
 
   для: sega_z   (06.09.2011 в 19:47)
 

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

  Ответить  
 
 автор: sega_z   (06.09.2011 в 20:00)   письмо автору
 
   для: cheops   (06.09.2011 в 19:49)
 

Допустим в цикле do - while присваивается значения переменной $id из б.д. (значения в этом цикле могут повторятся) и выводится указанным оператором (printf ($id)).

Как сделать чтобы находясь в цикле оператор выводил одиннаковые значения только один раз?

  Ответить  
 
 автор: nikita2206   (06.09.2011 в 20:13)   письмо автору
 
   для: sega_z   (06.09.2011 в 20:00)
 

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

  Ответить  
 
 автор: sega_z   (06.09.2011 в 21:03)   письмо автору
 
   для: nikita2206   (06.09.2011 в 20:13)
 

Можно на моём примере показать вашу версию?

  Ответить  
 
 автор: cheops   (06.09.2011 в 20:14)   письмо автору
 
   для: sega_z   (06.09.2011 в 20:00)
 

Тут либо данные из таблицы лучше предварительно помещать в массив, который можно превратить в уникальный, либо, что предпочтительно, добиться уникального вывода средствами SQL - собственно он для этого и проектировался.

  Ответить  
 
 автор: sega_z   (06.09.2011 в 20:21)   письмо автору
 
   для: cheops   (06.09.2011 в 20:14)
 

Немного не понятно. Давайте я приведу вам конкретный код:
Это своего рода поиск схожих слов в тексте и заголовке объявления


$str1 = "норковая шуба";
   $str1 = mb_strtolower($str1); // Приводим все символы к нижнему регистру
   $a1 = explode(" ",$str1); // Заносим слова в массив
   $result = mysql_query("SELECT * FROM doska ORDER BY id DESC",$db);
   $myrow = mysql_fetch_array ($result);
   do
   {
   $str2 = $myrow['zagolovok'];
   $str2 = strtolower($str2); // Приводим все символы к нижнему регистру
   $a2 = explode(" ",$str2); // Заносим слова в массив
   $str3 = $myrow['text_obyavl'];
   $str3 = strtolower($str3); // Приводим все символы к нижнему регистру
   $a3 = explode(" ",$str3); // Заносим слова в массив
   $a = array_merge($a2, $a3);
   for($i = 0; $i < count($a); $i++)
   {
   $var1 = similar_text($a1[0], $a[$i], &$tmp1);
   if ($tmp1 >= 75)
   {
   for($i = 0; $i < count($a); $i++)
   {
   $var2 = similar_text($a1[1], $a[$i], &$tmp2);
   if ($tmp2 >= 75)
   {
   $zagolovok = $myrow['zagolovok'];
   $id = $myrow['id'];
   echo "№ $id: $zagolovok $tmp1, $tmp2<br><br>"; // схожесть строк в процентах
   }
   }
   }
   }
   }
   while ($myrow = mysql_fetch_array ($result));


Проблема в том, что так выводятся одинаковые номера объявлений несколько раз

  Ответить  
 
 автор: sega_z   (07.09.2011 в 19:58)   письмо автору
 
   для: sega_z   (06.09.2011 в 20:21)
 

Что никто не поможет???

  Ответить  
 
 автор: Valick   (07.09.2011 в 21:08)   письмо автору
 
   для: sega_z   (07.09.2011 в 19:58)
 

вот вы сейчас выдернули чеку из гранаты и вертите её на пальце
помочь в чем? завалить сервер? :)
для поиска по базе есть штатные средства
___
для удаления дублей есть DISTINCT
да и слова в нижнем регистре можно сразу из базы дергать.. но это вас не спасет)

  Ответить  
 
 автор: sega_z   (07.09.2011 в 21:57)   письмо автору
 
   для: Valick   (07.09.2011 в 21:08)
 

Да, действительно нагрузка на сервер сильная.
А можете подсказать, как сделать поиск по базе похожих слов без использования оператора LIKE?
Потому, что при поиске по слову "Продам" строки со словом "Продаю" уже не выводятся оператором LIKE и TEXTREA

  Ответить  
 
 автор: Valick   (07.09.2011 в 22:45)   письмо автору
 
   для: sega_z   (07.09.2011 в 21:57)
 

ну во-первых по слову Продам не нужно искать, это должен быть соответствующий раздел)
просто посмотрите информацию на тему полнотекстового поиска
___
лично я бы собирал информацию о поисковых запросах и создал бы базу таких слов и всякого рода вариаций этих слов, ставил в соответствие значимую часть слова и по ней бы делал полнотекстовый поиск, хотя это только размышления, вам нужен совет от человека с большей практикой чем у меня

  Ответить  
 
 автор: sega_z   (07.09.2011 в 23:18)   письмо автору
 
   для: Valick   (07.09.2011 в 22:45)
 

Ну все равно, спасибо вам!!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования