[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск в массиве
vagon
Не могу сообразить почему не работает код... Использовал функцию поиска в массиве in_array. Поиск не работает...


$l_SQL = "SELECT * FROM `tbl_ad` WHERE `tipo`='ads' AND `plan` > `members` AND `vip` ='1' ORDER BY id DESC";
$links_array_db = mysql_query($l_SQL);

// + всего 1 дополнительный запрос:
$K_SQL = "SELECT `ident` FROM `tbl_ad` WHERE `tipo`='v' AND `user`='$us_l'";
$ident_db = mysql_query($K_SQL);
$ident_arr = mysql_fetch_array($ident_db);

if(mysql_num_rows($links_array_db) > 0)
{
$links_array = mysql_fetch_array($links_array_db);

do{


<div id="d">
<
table border="0" cellpadding="0" cellspacing="1" width="100%">
<
tr>
<
td>

</
td>
<
td align="center">

// и проверяем, нет ли в массиве такого ident
if(in_array(''.$links_array['ident'].'', $ident_arr)) { echo "делаем то что нужно...";}

что я делаю неправильно?



Спустя 8 минут, 14 секунд (6.05.2011 - 09:11) Renden написал(а):
vagon
не уверен но мб кавычки и точки не нужны тут?

if(in_array($links_array['ident'], $ident_arr))
echo "делаем то что нужно...";


И зачем тебе do {} ?

Спустя 5 минут, 4 секунды (6.05.2011 - 09:16) linker написал(а):
Да всё неправильно.

Спустя 1 час, 41 минута, 23 секунды (6.05.2011 - 10:57) Rand написал(а):
mysql_fetch_array возвращает только одну строку, при каждом вызове следующую. Логика полностью не верна.

Итого:
$links_array содержит по одному элементу на каждое поле. Значения каждого элемента - это значение соответствующего поля из первой строки.
$ident_arr содержит только один элемент - $ident_arr['ident']

Ты ищещь $links_array['ident'], в котором хранится значение поля ident первой строки из первого запроса, в масииве из одного элемента $ident_arr, в котором хранится значение поля ident первой строки второго запроса. Все равно что написать if($links_array['ident'] == $ident_arr['idnet']).

И ещё. Если ты используешь ассоциативные индексы, то тогда нужно использовать mysql_fetch_assoc или mysql_fetch_array($result, MYSQL_ASSOC).

Спустя 1 час, 20 минут, 50 секунд (6.05.2011 - 12:18) vagon написал(а):
Renden, все работает если запрос поместить внутрь цикла, тогда и поиск по массиву не нужен в принципе, но это не подходит, будет слишком много запросов. Поэтому решил сделать так...
через do while выводится контент, код привел не весь.
Rand, про первую строку из первого запроса я уже догадался...
mysql_fetch_assoc пробовал использовать, то же самое, не работает...

if(in_array($links_array['ident'], $ident_arr)) 

это вроде правильно, разве что еще внешнее условие проверки на пустоту нужно добавить.
Как же запрос то правильно сделать?

Спустя 6 часов, 53 минуты, 21 секунда (6.05.2011 - 19:12) vagon написал(а):
Как по всему массиву то искать? Кто-нибудь подскажет?

Спустя 28 минут, 5 секунд (6.05.2011 - 19:40) kovaldm написал(а):
В данном контексте циклом, наверное.

Спустя 39 минут, 50 секунд (6.05.2011 - 20:19) vagon написал(а):
Цитата
В данном контексте циклом, наверное.

Я же писал, в цикле сделать не проблема, но будет запросов слишком много... Можно же как-то вынять одним доп. запросом ВСЕ, а уже потом проверять равно-неравно...

Спустя 33 минуты, 3 секунды (6.05.2011 - 20:52) kovaldm написал(а):
А вы попробуйте код привести в порядок - гораздо проще будет разобраться.

Спустя 1 час, 5 минут, 4 секунды (6.05.2011 - 21:58) vagon написал(а):
Цитата
А вы попробуйте код привести в порядок - гораздо проще будет разобраться.

Вот об этом я и пишу здесь, хотелось бы понять что не так с кодом.

Спустя 2 часа, 28 минут, 13 секунд (7.05.2011 - 00:26) sergeiss написал(а):
vagon - прочитай вот эту тему: http://phpforum.ru/index.php?showtopic=21916 и ты поймешь, что у тебя сделано не верно в логике получения данных.

Спустя 11 часов, 53 минуты, 44 секунды (7.05.2011 - 12:20) vagon написал(а):
Заменил array на assoc, do while на while. Что еще нужно сделать? Перебор массива?

foreach($array as $key => $value)
{
// Если есть 0 в запросе отсеиваем его
if(!empty($value))
$sql_where[] = $key." = ".intval($value);
}

Спустя 3 часа, 11 минут, 35 секунд (7.05.2011 - 15:31) sergeiss написал(а):
Цитата (vagon @ 7.05.2011 - 13:20)
Заменил array на assoc, do while на while. Что еще нужно сделать?

Ты тему прочитал, что я ссылку дал? Там явно и четко показано, что ДО НАЧАЛА цикла while не надо ничего читать!!! Только в цикле.

Ты же сначала читаешь одну строку, а потом идешь в цикл. Вот у тебя кривизна и получается.

Спустя 7 часов, 8 минут, 59 секунд (7.05.2011 - 22:40) vagon написал(а):
Это все понятно. Вывод какой следует? Запрос повторять в цикле? Я уже писал что это не годится. Другое решение есть?

Спустя 49 минут, 15 секунд (7.05.2011 - 23:29) sergeiss написал(а):
Основной вопрос, заданный тобой - как искать в массиве, который ты создаешь в результате своих запросов. Я тебе ответил, что есть ошибка в коде... Но суть задачи от этого яснее не стала smile.gif Поэтому сложно дать тебе совет.

Опиши задачу, т.е. что ты хочешь сделать. Выбрать данные из 2-х разных таблиц и связать их по какому-то ключу? Тогда используй JOIN. Что-то другое? Тогда опиши.

Спустя 20 часов, 7 минут, 44 секунды (8.05.2011 - 19:37) vagon написал(а):
sergeiss, эх, попробую...

Первым запросом из таблицы базы вынимается несколько строк где `tipo`='ads' - (это контент) который через while выводится на страницу. В каждой из этих выводимых строк таблицы есть поле `ident`, в котором записано какое-то целое число, например 12345.

Вторым (и единственным) запросом я пытался вынять все вспомогательные строки. -
В той же таблице базы есть еще много вспомогательных строк, где `tipo`='v' и `user`='$us_l' и в некоторых из них в поле `ident` записано такое же число как и в поле `ident` одной из строк контента.

Так вот, нужно: если в поле `ident` какой-либо из вспомогательных строк находится то же число, где `tipo`='v' AND `user`='$us_l' AND `ident`=' ident такой же как в одной из строк 1 запроса' - в этой строке контента ставилась какая-либо пометка.

Спустя 2 дня, 16 часов, 24 минуты, 54 секунды (11.05.2011 - 12:02) vagon написал(а):
Ни у кого нет идей? Как с помощью in_array найти в массиве
совпадение?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.