За последние 24 часа нас посетил 9871 программист и 665 роботов. Сейчас ищут 152 программиста ...

Неувязочка с созданием многоуровневого массива

Тема в разделе "Прочие вопросы по PHP", создана пользователем mainprofilemail, 24 дек 2019.

  1. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Ребята всем привет

    И так начнем.

    Имеется Viber бот на PHP который отправляет пользователю клавиатуру с категориями товаров и в зависимости от выбранной категории отправляю пользователю карточки товара в карусели.


    Проблема заключается в следующем. Массив который создается и вытягивает данные из БД не работает по какой-то причине и карусель не приходит, а вот штучно созданый массив работает отлично.

    Массив который работает:
    PHP:
    1. $data['rich_media']['Type'] = 'rich_media';
    2. $data['rich_media']['ButtonsGroupColumns'] = 6;
    3. $data['rich_media']['ButtonsGroupRows'] = 7;
    4. $data['rich_media']['BgColor'] = '#FFFFFF';
    5.  
    6.  
    7.  
    8. $data['rich_media']['Buttons'][0]['Columns'] = 6;
    9. $data['rich_media']['Buttons'][0]['Rows'] = 4;
    10. $data['rich_media']['Buttons'][0]['ActionType'] = 'reply';
    11. $data['rich_media']['Buttons'][0]['ActionBody'] = 'imageOpen5556';
    12. $data['rich_media']['Buttons'][0]['Image'] = 'http://mydomen.com.ua/image/cache/data/S5050045-500x500.jpg';
    13.  
    14.  
    15. $data['rich_media']['Buttons'][1]['Columns'] = 6;
    16. $data['rich_media']['Buttons'][1]['Rows'] = 1;
    17. $data['rich_media']['Buttons'][1]['ActionType'] = 'none';
    18. $data['rich_media']['Buttons'][1]['ActionBody'] = 'description5555';
    19. $data['rich_media']['Buttons'][1]['Text'] = '<font color=#323232><b>Сережки для дівчат</b></font>';
    20. $data['rich_media']['Buttons'][1]['TextSize'] = 'medium';
    21. $data['rich_media']['Buttons'][1]['TextVAlign'] = 'middle';
    22. $data['rich_media']['Buttons'][1]['TextHAlign'] = 'center';
    23.  
    24.  
    25. $data['rich_media']['Buttons'][2]['Columns'] = 6;
    26. $data['rich_media']['Buttons'][2]['Rows'] = 1;
    27. $data['rich_media']['Buttons'][2]['Text'] = '<font color=#c0392b size=16><b>150.00 грн</b></font>';
    28. $data['rich_media']['Buttons'][2]['ActionType'] = 'none';
    29. $data['rich_media']['Buttons'][2]['ActionBody'] = 'imageOpen';
    30. $data['rich_media']['Buttons'][2]['TextSize'] = 'regular';
    31. $data['rich_media']['Buttons'][2]['TextVAlign'] = 'middle';
    32. $data['rich_media']['Buttons'][2]['TextHAlign'] = 'center';
    33.  
    34.  
    35. $data['rich_media']['Buttons'][3]['Columns'] = 6;
    36. $data['rich_media']['Buttons'][3]['Rows'] = 1;
    37. $data['rich_media']['Buttons'][3]['ActionType'] = 'reply';
    38. $data['rich_media']['Buttons'][3]['ActionBody'] = 'buy3682';
    39. $data['rich_media']['Buttons'][3]['Text'] = '<font color=#ffffff>Купити</font>';
    40. $data['rich_media']['Buttons'][3]['TextSize'] = 'large';
    41. $data['rich_media']['Buttons'][3]['TextVAlign'] = 'middle';
    42. $data['rich_media']['Buttons'][3]['TextHAlign'] = 'middle';
    43. $data['rich_media']['Buttons'][3]['BgColor'] = '#27ae60';
    Теперь создаю этот же массив но вытягивают данные из БД для автоматизации работы:
    PHP:
    1. function oneCategory($connect, $category){
    2.     $oneCategory = $connect->query("SELECT * FROM product WHERE category=".$category." AND active=1");
    3.     return $oneCategory;
    4. }
    5.  
    6. function rich_mediaArray($connect){
    7.     $rich_mediaArray = $connect->query("SELECT * FROM rich_media");
    8.     return $rich_mediaArray;
    9. }
    10.  
    11. function rich_media($category){
    12.  
    13.     global $connect;
    14.  
    15.     $categoryArray = oneCategory($connect, $category);
    16.     $rich_mediaArray = rich_mediaArray($connect);
    17.  
    18.     $rich_media = [];
    19.     $rich_media['Type'] = 'rich_media';
    20.     $rich_media['ButtonsGroupColumns'] = '6';
    21.     $rich_media['ButtonsGroupRows'] = '7';
    22.     $rich_media['BgColor'] = '#FFFFFF';
    23.  
    24.  
    25.     for($i=0; $i<$categoryArray->num_rows; $i++){
    26.         foreach($testt = $categoryArray->fetch_assoc() as $key => $value){
    27.             for($a=0; $a<$rich_mediaArray->num_rows; $a++){
    28.                 foreach($rich_mediaArray->fetch_assoc() as $key2 => $value2){
    29.                     if($key2 != 'id' && $value2 != 'false'){
    30.                  
    31.                         $rich_media['Buttons'][$a][$key2] = $value2;
    32.                      
    33.                         if($key2 == 'Image'){
    34.                             $rich_media['Buttons'][$a][$key2] = $testt['image'];
    35.                         }
    36.                     }
    37.                 }
    38.             }
    39.         }
    40.     }
    41.     return $rich_media;
    42. }
    Запускаю функцию создания массива:
    PHP:
    1. $data['rich_media'] = rich_media('earrings');
    И вуаля. Карусель не приходит. Массив проверил через var_dump() заполняется он правильно, а вот в чем проблема не пойму.

    Вот массив который не работает.

    PHP:
    1. array(1) {
    2.     ["rich_mediaa"]=> array(5) {
    3.         ["Type"]=> string(10) "rich_media"
    4.         ["ButtonsGroupColumns"]=> string(1) "6"
    5.         ["ButtonsGroupRows"]=> string(1) "7"
    6.         ["BgColor"]=> string(7) "#FFFFFF"
    7.         ["Buttons"]=> array(4) {
    8.             [0]=> array(5) {
    9.                 ["Columns"]=> string(1) "6"
    10.                 ["Rows"]=> string(1) "4"
    11.                 ["ActionType"]=> string(5) "reply"
    12.                 ["ActionBody"]=> string(13) "imageOpen5556"
    13.                 ["Image"]=> string(62) "http://mydomen.com.ua/image/cache/data/S5050045-500x500.jpg"
    14.             }
    15.             [1]=> array(8) {
    16.                 ["Columns"]=> string(1) "6"
    17.                 ["Rows"]=> string(1) "1"
    18.                 ["ActionType"]=> string(4) "none"
    19.                 ["ActionBody"]=> string(15) "description5555"
    20.                 ["Text"]=> string(68) "<font color=#323232><b>Сережки для дівчат</b></font>"
    21.                 ["TextSize"]=> string(6) "medium"
    22.                 ["TextVAlign"]=> string(6) "middle"
    23.                 ["TextHAlign"]=> string(6) "center"
    24.             }
    25.             [2]=> array(8) {
    26.                 ["Columns"]=> string(1) "6"
    27.                 ["Rows"]=> string(1) "1"
    28.                 ["ActionType"]=> string(4) "none"
    29.                 ["ActionBody"]=> string(9) "imageOpen"
    30.                 ["Text"]=> string(55) "<font color=#c0392b size=16><b>150.00 грн</b></font>"
    31.                 ["TextSize"]=> string(7) "regular"
    32.                 ["TextVAlign"]=> string(6) "middle"
    33.                 ["TextHAlign"]=> string(6) "center"
    34.             }
    35.             [3]=> array(9) {
    36.                 ["Columns"]=> string(1) "6"
    37.                 ["Rows"]=> string(1) "1"
    38.                 ["ActionType"]=> string(5) "reply"
    39.                 ["ActionBody"]=> string(6) "buy765"
    40.                 ["Text"]=> string(39) "<font color=#ffffff>Купити</font>"
    41.                 ["TextSize"]=> string(5) "large"
    42.                 ["TextVAlign"]=> string(6) "middle"
    43.                 ["TextHAlign"]=> string(6) "middle"
    44.                 ["BgColor"]=> string(7) "#27ae60"
    45.             }
    46.         }
    47.     }
    48. }
    Уже башка не варит. В чем проблема?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.162
    Симпатии:
    993
    Адрес:
    Лень
    дамп двух таблиц со значениями + какой должен быть результат данных в студию
    --- Добавлено ---
    У тебя лапша в коде. Если не ошибаюсь - 1 строкой это все делается
     
  3. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.755
    Симпатии:
    292
    Осталось распечатать массив созданный руками и найти 10 отличий
     
  4. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Вот так должно быть
    PHP:
    1. $data['rich_media']['Type'] = 'rich_media';
    2. $data['rich_media']['ButtonsGroupColumns'] = 6;
    3. $data['rich_media']['ButtonsGroupRows'] = 7;
    4. $data['rich_media']['BgColor'] = '#FFFFFF';
    5.  
    6.  
    7.  
    8. $data['rich_media']['Buttons'][0]['Columns'] = 6;
    9. $data['rich_media']['Buttons'][0]['Rows'] = 4;
    10. $data['rich_media']['Buttons'][0]['ActionType'] = 'reply';
    11. $data['rich_media']['Buttons'][0]['ActionBody'] = 'imageOpen5556';
    12. $data['rich_media']['Buttons'][0]['Image'] = 'http://mydomen.com.ua/image/cache/data/S5050045-500x500.jpg';
    13.  
    14.  
    15. $data['rich_media']['Buttons'][1]['Columns'] = 6;
    16. $data['rich_media']['Buttons'][1]['Rows'] = 1;
    17. $data['rich_media']['Buttons'][1]['ActionType'] = 'none';
    18. $data['rich_media']['Buttons'][1]['ActionBody'] = 'description5555';
    19. $data['rich_media']['Buttons'][1]['Text'] = '<font color=#323232><b>Сережки для дівчат</b></font>';
    20. $data['rich_media']['Buttons'][1]['TextSize'] = 'medium';
    21. $data['rich_media']['Buttons'][1]['TextVAlign'] = 'middle';
    22. $data['rich_media']['Buttons'][1]['TextHAlign'] = 'center';
    23.  
    24.  
    25. $data['rich_media']['Buttons'][2]['Columns'] = 6;
    26. $data['rich_media']['Buttons'][2]['Rows'] = 1;
    27. $data['rich_media']['Buttons'][2]['Text'] = '<font color=#c0392b size=16><b>150.00 грн</b></font>';
    28. $data['rich_media']['Buttons'][2]['ActionType'] = 'none';
    29. $data['rich_media']['Buttons'][2]['ActionBody'] = 'imageOpen';
    30. $data['rich_media']['Buttons'][2]['TextSize'] = 'regular';
    31. $data['rich_media']['Buttons'][2]['TextVAlign'] = 'middle';
    32. $data['rich_media']['Buttons'][2]['TextHAlign'] = 'center';
    33.  
    34.  
    35. $data['rich_media']['Buttons'][3]['Columns'] = 6;
    36. $data['rich_media']['Buttons'][3]['Rows'] = 1;
    37. $data['rich_media']['Buttons'][3]['ActionType'] = 'reply';
    38. $data['rich_media']['Buttons'][3]['ActionBody'] = 'buy3682';
    39. $data['rich_media']['Buttons'][3]['Text'] = '<font color=#ffffff>Купити</font>';
    40. $data['rich_media']['Buttons'][3]['TextSize'] = 'large';
    41. $data['rich_media']['Buttons'][3]['TextVAlign'] = 'middle';
    42. $data['rich_media']['Buttons'][3]['TextHAlign'] = 'middle';
    43. $data['rich_media']['Buttons'][3]['BgColor'] = '#27ae60';
    А вот такое показывает var_dump()
    PHP:
    1. array(1) {
    2.     ["rich_mediaa"]=> array(5) {
    3.         ["Type"]=> string(10) "rich_media"
    4.         ["ButtonsGroupColumns"]=> string(1) "6"
    5.         ["ButtonsGroupRows"]=> string(1) "7"
    6.         ["BgColor"]=> string(7) "#FFFFFF"
    7.         ["Buttons"]=> array(4) {
    8.             [0]=> array(5) {
    9.                 ["Columns"]=> string(1) "6"
    10.                 ["Rows"]=> string(1) "4"
    11.                 ["ActionType"]=> string(5) "reply"
    12.                 ["ActionBody"]=> string(13) "imageOpen5556"
    13.                 ["Image"]=> string(62) "http://mydomen.com.ua/image/cache/data/S5050045-500x500.jpg"
    14.             }
    15.             [1]=> array(8) {
    16.                 ["Columns"]=> string(1) "6"
    17.                 ["Rows"]=> string(1) "1"
    18.                 ["ActionType"]=> string(4) "none"
    19.                 ["ActionBody"]=> string(15) "description5555"
    20.                 ["Text"]=> string(68) "<font color=#323232><b>Сережки для дівчат</b></font>"
    21.                 ["TextSize"]=> string(6) "medium"
    22.                 ["TextVAlign"]=> string(6) "middle"
    23.                 ["TextHAlign"]=> string(6) "center"
    24.             }
    25.             [2]=> array(8) {
    26.                 ["Columns"]=> string(1) "6"
    27.                 ["Rows"]=> string(1) "1"
    28.                 ["ActionType"]=> string(4) "none"
    29.                 ["ActionBody"]=> string(9) "imageOpen"
    30.                 ["Text"]=> string(55) "<font color=#c0392b size=16><b>150.00 грн</b></font>"
    31.                 ["TextSize"]=> string(7) "regular"
    32.                 ["TextVAlign"]=> string(6) "middle"
    33.                 ["TextHAlign"]=> string(6) "center"
    34.             }
    35.             [3]=> array(9) {
    36.                 ["Columns"]=> string(1) "6"
    37.                 ["Rows"]=> string(1) "1"
    38.                 ["ActionType"]=> string(5) "reply"
    39.                 ["ActionBody"]=> string(6) "buy765"
    40.                 ["Text"]=> string(39) "<font color=#ffffff>Купити</font>"
    41.                 ["TextSize"]=> string(5) "large"
    42.                 ["TextVAlign"]=> string(6) "middle"
    43.                 ["TextHAlign"]=> string(6) "middle"
    44.                 ["BgColor"]=> string(7) "#27ae60"
    45.             }
    46.         }
    47.     }
    48. }
    --- Добавлено ---
    В том то и дело что массив то я распечатал он доступен выше и не нашел отличия которые могут повлиять на работу карусели
     
    #4 mainprofilemail, 24 дек 2019
    Последнее редактирование: 24 дек 2019
  5. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.755
    Симпатии:
    292
    а какие нашёл?
     
  6. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    В конечном массиве некоторые данные поменяны местами но значения присваиваются правильно и формат выводимой строки что также не есть критичным (проверено на работающем массиве)

    Конечный массив с данными. Здесь они могут стоять в произвольном порядке. Формат значений в полях "Columns" u "Rows" выводится как string вместо int
    PHP:
    1.             [0]=> array(5) {
    2.                 ["Columns"]=> string(1) "6"
    3.                 ["Rows"]=> string(1) "4"
    4.                 ["ActionType"]=> string(5) "reply"
    5.                 ["ActionBody"]=> string(13) "imageOpen5556"
    6.                 ["Image"]=> string(62) "http://mydomen.com.ua/image/cache/data/S5050045-500x500.jpg"
    7.             }
     
    #6 mainprofilemail, 24 дек 2019
    Последнее редактирование: 24 дек 2019
  7. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.755
    Симпатии:
    292
    в чём проблема сделать int?
     
  8. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Да нет проблем, но оно и так работает, проверял на массиве что вручную делал
     
  9. Sail

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

    С нами с:
    1 ноя 2016
    Сообщения:
    1.147
    Симпатии:
    256
  10. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Сравнивал раз 10 наверное, все одинаково. Из-за этого и не пойму в чем же проблема
     
  11. Sail

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

    С нами с:
    1 ноя 2016
    Сообщения:
    1.147
    Симпатии:
    256
    Две этих строки сравки по буковкам.
     
  12. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    За какие именно строки иы говоришь?
     
  13. Sail

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

    С нами с:
    1 ноя 2016
    Сообщения:
    1.147
    Симпатии:
    256
    'rich_media' и 'rich_mediaa'
     
  14. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Да за это знаю это просто добавил букву чтобы вывести вардамп в двух разных массивах на одной странице. В оригинале лишней буквы в этом месте нету
     
  15. Sail

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

    С нами с:
    1 ноя 2016
    Сообщения:
    1.147
    Симпатии:
    256
    Тогда два приведённых массива идентичны за исключением значения 'ActionBody' третьей кнопки.
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.162
    Симпатии:
    993
    Адрес:
    Лень
    @mainprofilemail
     
  17. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    ActionBody отправляет значение из Вайбера на сервер, поэтому отношения к выводу карусели не имеет, там может быть записано все что угодно что мы хотим передать в код
    --- Добавлено ---
    Двух таблиц из Базы или двух массивов? Если массивов то они есть выше
     
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.162
    Симпатии:
    993
    Адрес:
    Лень
    конечно таблиц
     
  19. Sail

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

    С нами с:
    1 ноя 2016
    Сообщения:
    1.147
    Симпатии:
    256
    Ещё попробуй в массиве, созданном "вручную" вместо цифр написать строки (то есть, не $data['rich_media']['ButtonsGroupColumns']=6;, а $data['rich_media']['ButtonsGroupColumns']='6';)
    И проверь снова "...на массиве что вручную делал"
     
  20. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Двух таблиц из Базы или
    Пробовал работает....Еще варианты есть?
     
  21. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.162
    Симпатии:
    993
    Адрес:
    Лень
    Из базы дамп двух таблиц, откуда берешь значения для дальнейшей сортировки в массив o_O
     
  22. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    Таблица product
    https://ibb.co/ZLR8NxL
    Таблица rich_media
    https://ibb.co/pXqx81f

    Сомневаюсь конечно что это поможет так как сейчас данные из БД есть в массиве который я присылал ранее
     
  23. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.162
    Симпатии:
    993
    Адрес:
    Лень
    ну нaxуй
     
  24. mainprofilemail

    mainprofilemail Новичок

    С нами с:
    14 апр 2018
    Сообщения:
    53
    Симпатии:
    0
    :D:D:D
     
  25. Sail

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

    С нами с:
    1 ноя 2016
    Сообщения:
    1.147
    Симпатии:
    256
    Тогда ищи разницу в методах отправки "ручного" массива и сформированного функцией :)
    --- Добавлено ---
    И смотри ответ от viber api