Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Объединение одинаковых значений в массиве

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
sprite123
Отправлено: 12 Ноября, 2013 - 22:50:57
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




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

Вот пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($_SESSION['gids'] as &$d){    
  3. $sql ="
  4. SELECT one, two FROM table WHERE one='$d'
  5.  
  6. ";}




если я получаю разные значения $d то все нормально, но если эти значения одинаковые то выборка происходит несколько раз по одним и тем же значениям.

Можно как если значения $d совпадают объединить их и выводить только 1 раз?
 
 Top
tato
Отправлено: 13 Ноября, 2013 - 06:59:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $arr = array( 1, 2, 3, 4, 4, 4 );
  3.  
  4.     array_unique( $arr )
  5. );
  6.  

(Добавление)
Делать кучу селектов плохо, почитатйте что такое IN в mysql. Запрос будет примерно таким:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT one, two FROM TABLE WHERE one IN ( 1, 2, 3, 4, 5 )
  3.  


-----
просто ?: сложно
 
 Top
sprite123
Отправлено: 13 Ноября, 2013 - 14:20:43
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




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

Но значения будут динамически меняющиеся.

Т.е я выбираю товары вот так:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT one, two FROM TABLE WHERE one IN ($d )


где $d я получаю из массива:
PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['gids'] as &$d)
  2.  


Но если просто так использовать то у меня получается только последнее значение $d.
А как использовать их все?
 
 Top
IllusionMH
Отправлено: 13 Ноября, 2013 - 14:26:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




sprite123, implode ?
 
 Top
sprite123
Отправлено: 13 Ноября, 2013 - 15:02:55
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Пробую вот так что то не срабатывает.

Что делаю не так подскажите плизз?

PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['gids'] as &$d);
  2. $da = implode(",", $d);
  3. echo $da;

(Отредактировано автором: 13 Ноября, 2013 - 15:03:46)

 
 Top
imya
Отправлено: 13 Ноября, 2013 - 15:12:10
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




Фигурные скобки (begin, end) ?


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
IllusionMH
Отправлено: 13 Ноября, 2013 - 15:15:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




sprite123, сразу передавайте в функцию массив - результат работы array_unique
 
 Top
sprite123
Отправлено: 13 Ноября, 2013 - 15:56:15
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




не знаю что я делаю не так, но не работает.

Делаю вот так
PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['gids'] as &$d)
  2.  
  3. $sql ="
  4.    SELECT one, two FROM TABLE WHERE one IN ($d )
  5.  
  6. ";
  7.  $result = mysql_query($sql);


выдает только последний вариант.

хочу проверить пишу:
PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['gids'] as &$d)
  2.  
  3. echo $d.",";
  4.  
  5.  


выдает нормально как надо.

пишу

PHP:
скопировать код в буфер обмена
  1.     foreach ($_SESSION['gids'] as &$d)
  2.     $da = implode(",", $d);
  3.    
  4.  $sql ="
  5.    SELECT one, two FROM TABLE WHERE one IN ($da )
  6.  
  7. ";
  8.  $result = mysql_query($sql);
  9.  
  10.  
- вообще не работает.
 
 Top
IllusionMH
Отправлено: 13 Ноября, 2013 - 15:58:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




sprite123, потому что пытаетесь передавать только 1 элемент массива но в цикле. А нужно сразу весь массив.
 
 Top
sprite123
Отправлено: 13 Ноября, 2013 - 16:44:21
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Т.е вот так:

PHP:
скопировать код в буфер обмена
  1. foreach (implode(array_unique($_SESSION['gids'])) as &$d)
  2.  
  3.    
  4.  $sql ="
  5.   SELECT one, two FROM TABLE WHERE one IN ($d)
  6.  
  7. ";
  8.  $result = mysql_query($sql);


тоже не работает
 
 Top
IllusionMH
Отправлено: 13 Ноября, 2013 - 17:25:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




sprite123, уберите foreach. Зачем он если теперь нет множества запросов?
Вы бы хоть глянули что возвращает данная функция. Это будет готовая строка, если исправить косяк в моем коде, где не передавался разделитель.

(Отредактировано автором: 13 Ноября, 2013 - 17:25:56)

 
 Top
sprite123
Отправлено: 13 Ноября, 2013 - 17:56:24
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




а как мне потом использовать значения в селекте?

PHP:
скопировать код в буфер обмена
  1.  $sql ="
  2.  SELECT one, two FROM TABLE WHERE one IN (тут что писать? (тут должны быть значения     implode(',', array_unique($_SESSION['gids']));))
  3.  
  4. ";
  5.  $result = mysql_query($sql);

(Отредактировано автором: 13 Ноября, 2013 - 17:56:41)

 
 Top
IllusionMH
Отправлено: 13 Ноября, 2013 - 18:10:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




*лицовруках*
sprite123, вы понимаете как переменные в строке интерпретируются? Зачем вы туда весь набор функций подставляете?
Сохраните результат в переменную и уже ее вставляйте.
 
 Top
esterio
Отправлено: 13 Ноября, 2013 - 18:17:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Facepalm
Зачем Вы суете foreach там где его нафиг не нужно
1. сначала формируем строку для оператора IN в MySQL

2. формируем SQL запрос
PHP:
скопировать код в буфер обмена
  1. $query = 'SELECT one, two FROM TABLE WHERE one IN ('.implode(',', array_unique($_SESSION['gids'])).')';

3. делаем запрос и вибираем данные
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query($query);
  2. while($row = mysql_fetch_assoc($result))
  3. {
  4.     var_dump($row);
  5. }

4. PROFIT !!!
 
 Top
sprite123
Отправлено: 13 Ноября, 2013 - 18:19:04
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




все разобрался спасибо большое
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB