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
Форумы портала PHP.SU :: Версия для печати :: Объединение одинаковых значений в массиве
Форумы портала PHP.SU » » Вопросы новичков » Объединение одинаковых значений в массиве

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

1. sprite123 - 12 Ноября, 2013 - 22:50:57 - перейти к сообщению
одскажите как объединить одинаковые значения в массиве, что бы не делать по одинаковым значениям 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 раз?
2. tato - 13 Ноября, 2013 - 06:59:32 - перейти к сообщению
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.  
3. sprite123 - 13 Ноября, 2013 - 14:20:43 - перейти к сообщению
А подскажите как использовать значение полученное из массива в выборке.

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

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

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


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


Но если просто так использовать то у меня получается только последнее значение $d.
А как использовать их все?
4. IllusionMH - 13 Ноября, 2013 - 14:26:23 - перейти к сообщению
sprite123, implode ?
5. sprite123 - 13 Ноября, 2013 - 15:02:55 - перейти к сообщению
Пробую вот так что то не срабатывает.

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

PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['gids'] as &$d);
  2. $da = implode(",", $d);
  3. echo $da;
6. imya - 13 Ноября, 2013 - 15:12:10 - перейти к сообщению
Фигурные скобки (begin, end) ?
7. IllusionMH - 13 Ноября, 2013 - 15:15:18 - перейти к сообщению
sprite123, сразу передавайте в функцию массив - результат работы array_unique
8. sprite123 - 13 Ноября, 2013 - 15:56:15 - перейти к сообщению
не знаю что я делаю не так, но не работает.

Делаю вот так
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.  
- вообще не работает.
9. IllusionMH - 13 Ноября, 2013 - 15:58:25 - перейти к сообщению
sprite123, потому что пытаетесь передавать только 1 элемент массива но в цикле. А нужно сразу весь массив.
10. sprite123 - 13 Ноября, 2013 - 16:44:21 - перейти к сообщению
Т.е вот так:

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);


тоже не работает
11. IllusionMH - 13 Ноября, 2013 - 17:25:18 - перейти к сообщению
sprite123, уберите foreach. Зачем он если теперь нет множества запросов?
Вы бы хоть глянули что возвращает данная функция. Это будет готовая строка, если исправить косяк в моем коде, где не передавался разделитель.
12. sprite123 - 13 Ноября, 2013 - 17:56:24 - перейти к сообщению
а как мне потом использовать значения в селекте?

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. IllusionMH - 13 Ноября, 2013 - 18:10:19 - перейти к сообщению
*лицовруках*
sprite123, вы понимаете как переменные в строке интерпретируются? Зачем вы туда весь набор функций подставляете?
Сохраните результат в переменную и уже ее вставляйте.
14. esterio - 13 Ноября, 2013 - 18:17:19 - перейти к сообщению
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 !!!
15. sprite123 - 13 Ноября, 2013 - 18:19:04 - перейти к сообщению
все разобрался спасибо большое

 

Powered by ExBB FM 1.0 RC1