За последние 24 часа нас посетили 71175 программистов и 1625 роботов. Сейчас ищут 996 программистов ...

как возвратить ассоциативный массив с новым добавленным ключом и его значением

Тема в разделе "PHP для новичков", создана пользователем AlexsaiL, 1 мар 2017.

  1. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Подскажите, как возвратить ассоциативный массив, с новым добавленным ключом и его значением?
    создал функцию и проверяю её, но она возвращает не то что надо. не могу понять что делаю не так.
    Сама функция:
    Код (Text):
    1. function getProductsByCat($itemId) {
    2.     $sql = "SELECT t1.ID,
    3.     t1.NAME as NAME,
    4.     t1.PICTURE as PICTURE,
    5.     t1.PRICE_RUS as PRICE_RUS,
    6.     t1.ARCHIVE as ARCHIVE,
    7.     t1.GROUP_NAME as GROUP_NAME,
    8.     t1.ID_PRODUCT as ID_PRODUCT1,
    9.     t2.ID_PRODUCT as ID_PRODUCT2,
    10.     t2.ID_GROUP_OF_PRODUCTS as ID_GROUP_OF_PRODUCTS FROM `product` t1 LEFT JOIN `link_gr-of-prod_with_prod` t2 ON t1.ID_PRODUCT = t2.ID_PRODUCT  WHERE `ID_GROUP_OF_PRODUCTS` = '{$itemId}' ";
    11. //    d($sql);
    12.     $rs = mysql_query($sql);
    13.    
    14.     if (mysql_num_rows($rs)!= 0){
    15.         $smartyRs = array();
    16.         while($row = mysql_fetch_assoc($rs)) {
    17.             $result = $row['ID_PRODUCT2'];
    18.             $sql = "SELECT * FROM `pictures` WHERE  `ID_PRODUCT` = '{$result}'  ORDER BY `ORDERA` DESC";
    19.            
    20.             $res = mysql_query($sql);
    21.  
    22.             if (mysql_num_rows($res) != 0){
    23.             while($row1 = mysql_fetch_assoc($res)) {
    24.                     return $row1['PICTURE_BIG'];
    25.             }
    26.            
    27.             }
    28.             else{
    29.                     return "img_default.jpg";  
    30.             }
    31.          
    32.            
    33.                 $row['PICTURE_BIG'] = $row1;
    34.              
    35.    
    36.         $smartyRs[] = $row;
    37.         }
    38.          
    39. }  
    40.     d($smartyRs);
    41.     return $smartyRs;
    42. }
    Итог: возвращает мне только одно имя изображения с бд. (Debug: b_GA4212U_S3-2.jpg )

    если закоментить цикл второго обращения к бд, то отобразится ассоциативный массив с добавленным ключом:
    Код (Text):
    1. function getProductsByCat($itemId) {
    2.     $sql = "SELECT t1.ID,
    3.     t1.NAME as NAME,
    4.     t1.PICTURE as PICTURE,
    5.     t1.PRICE_RUS as PRICE_RUS,
    6.     t1.ARCHIVE as ARCHIVE,
    7.     t1.GROUP_NAME as GROUP_NAME,
    8.     t1.ID_PRODUCT as ID_PRODUCT1,
    9.     t2.ID_PRODUCT as ID_PRODUCT2,
    10.     t2.ID_GROUP_OF_PRODUCTS as ID_GROUP_OF_PRODUCTS FROM `product` t1 LEFT JOIN `link_gr-of-prod_with_prod` t2 ON t1.ID_PRODUCT = t2.ID_PRODUCT  WHERE `ID_GROUP_OF_PRODUCTS` = '{$itemId}' ";
    11. //    d($sql);
    12.     $rs = mysql_query($sql);
    13.    
    14.     if (mysql_num_rows($rs)!= 0){
    15.         $smartyRs = array();
    16.         while($row = mysql_fetch_assoc($rs)) {
    17.             $result = $row['ID_PRODUCT2'];
    18.             $sql = "SELECT * FROM `pictures` WHERE  `ID_PRODUCT` = '{$result}'  ORDER BY `ORDERA` DESC";
    19.            
    20.             $res = mysql_query($sql);
    21.  
    22. //            if (mysql_num_rows($res) != 0){
    23. //            while($row1 = mysql_fetch_assoc($res)) {
    24. //                    return $row1['PICTURE_BIG'];
    25. //            }
    26. //          
    27. //            }
    28. //            else{
    29. //                    return "img_default.jpg";  
    30. //            }
    31.          
    32.            
    33.                 $row['PICTURE_BIG'] = $row1;
    34.              
    35.    
    36.         $smartyRs[] = $row;
    37.         }
    38.          
    39. }  
    40.    
    41.     return $smartyRs;
    42. }
    Код (Text):
    1. Debug:
    2. Array
    3. (
    4.     [0] => Array
    5.         (
    6.             [ID] => 1
    7.             [NAME] => GA-4212UB/S3
    8.             [PICTURE] =>
    9.             [PRICE_RUS] =>
    10.             [ARCHIVE] => 1
    11.             [GROUP_NAME] => Автомобильное Зарядное Устройство
    12.             [ID_PRODUCT1] => 1
    13.             [ID_PRODUCT2] => 1
    14.             [ID_GROUP_OF_PRODUCTS] => 420
    15.             [PICTURE_BIG] =>
    16.         )
    17.  
    18.     [1] => Array
    19.         (
    20.             [ID] => 14
    21.             [NAME] => GA-4212UB/S2
    22.             [PICTURE] =>
    23.             [PRICE_RUS] =>
    24.             [ARCHIVE] => 1
    25.             [GROUP_NAME] => Автомобильное Зарядное Устройство
    26.             [ID_PRODUCT1] => 14
    27.             [ID_PRODUCT2] => 14
    28.             [ID_GROUP_OF_PRODUCTS] => 420
    29.             [PICTURE_BIG] =>
    30.         )
    [PICTURE_BIG] без значения, так как часть кода под комментом, стоит раскоментить как вылетит имя изображения и ни какого массива.
    подскажите как правильно сделать. Цель: вернуть ассоциативный массив с его значением.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    заменить на
    Код (Text):
    1. $row['PICTURE_BIG'] = $row1['PICTURE_BIG'];
    эту строку убрать
     
  3. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @AlexsaiL не уверен но видимо тебе нужно это
    PHP:
    1.             if (mysql_num_rows($res) != 0){
    2.             while($row1 = mysql_fetch_assoc($res)) {
    3.                     $result[$i++]=$row1['PICTURE_BIG'];
    4.             }
    5.            return $result;
     
  4. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    заменил, не изменилось, ранее менял изменений никаких
     
  5. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    прописал, но что то изменений нет
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @AlexsaiL а раскомментировал код?
     
  7. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    да. а по другому можно как то обработать запрос?
     
  8. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    мне надо с первого запроса к БД взять ID_PRODUCT сравнить его с ID_PRODUCT во втором запросе и взять соответсвующее изображение прогнав через ассоциативный массив вернуть ключ со значением в первый ассоциативный(основной) массив
     
  9. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @AlexsaiL print_r что показывает?
    --- Добавлено ---
    можно return implode(',',$result);
     
  10. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    она ничего не отображает.
    --- Добавлено ---
    в место чего его вставить?
     
  11. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    УрААА!!! получилось! а ларчик просто открывался!)))):rolleyes::eek::):cool:
    в общем я не туда вставил эту строку :
    Код (Text):
    1. $row['PICTURE_BIG'] = $row1['PICTURE_BIG'];
    старый код :
    Код (Text):
    1. if (mysql_num_rows($res) != 0){
    2.             while($row1 = mysql_fetch_assoc($res)) {
    3.                     return $row1['PICTURE_BIG'];
    4.             }
    5.          
    6.             }
    7.             else{
    8.                     return "img_default.jpg";
    9.             }
    10.        
    11.          
    12.                 $row['PICTURE_BIG'] = $row1['PICTURE_BIG'];
    13.              
    а надо было строку кода прописывать после закрывающийся фигурной скобки цикла while! :
    Код (Text):
    1. while($row1 = mysql_fetch_assoc($res)) {
    2.                    
    3.                 $row['PICTURE_BIG'] = $row1['PICTURE_BIG'];
    4.            
    5.             }
     
    [vs] нравится это.
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    AlexsaiL нравится это.
  13. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    всем спасибо за помощь!)