За последние 24 часа нас посетили 20958 программистов и 1131 робот. Сейчас ищут 357 программистов ...

Раскодировка json и вывод на экран

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

Метки:
  1. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Добрый день уважаемые форумчане. Помогите пожалуйста, решить следующую задачу.
    Есть база с которой по моим запросам я получаю объекты недвижимости в json формате. Мне эти объекты необходимо выводить пользователю согласно запроса.
    Как я понимаю, - необходимо распарсить получаемый json в объект или массив и с массива вытащить данные в переменные и эти переменные подставить на страницу пользователю. Но сделать это не выходит. Прошу помощи в разборе объекта(или массива) на переменные или же уроки где рассматривается данная тема.
    PHP:
    1.  $version = "****";
    2. $company = "*****";
    3. $deal = "sell";
    4. $property = "flat";
    5. $country_id = "ALL";
    6. $access_key = "example";
    7. $access_password = "example";
    8. $region_id = "example";
    9. $locality_id = "example";
    10.  
    11. // Создаём POST-запрос
    12. $POST = array (
    13.     "version" => $version,
    14.     "company" => $company,
    15.     "access_key" => $access_key,
    16.     "access_password" => $access_password,
    17.     "deal" => $deal,
    18.     "property" => $property,
    19.     "country_id" => $country_id,
    20.     "region_id" => $region_id,
    21.     "locality_id" => $locality_id
    22.     );
    23.  
    24. // Устанавливаем соединение
    25. $ch = curl_init();
    26. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    27. curl_setopt($ch, CURLOPT_POST, 1);
    28. curl_setopt($ch, CURLOPT_POSTFIELDS, $POST);
    29. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    30. curl_setopt($ch, CURLOPT_URL,
    31.     'http://re.plektan.com/ru/API_serp/search');
    32. $result = curl_exec($ch);
    33. $json_decode = json_decode($result, true);
    34. print_r(array_values($json_decode));
    После выполнения вышеуказанного кода, получаю такой ответ http://prntscr.com/ge28qa
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Ну что, нормальный ответ. В чём проблема? В отсутствии умения работать с массивами?
     
  3. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Я понимаю что ответ нормальный. Я так понимаю что нужно рекурсивно по всем массивам пройтись и значения подставить на страницу. Но реализовать у меня на данный момент это не выходит.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    А зачем рекурсивно? Выглядит, как будто двойного foreach достаточно. Выведи с человеческим форматированием print_r, будет видно (тег pre или исходный код страницы)
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    расшифровываю:
    PHP:
    1. echo '<pre>';
    2. print_r(array_values($json_decode));
    3. echo '</pre>'; //херак
     
  6. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Спасибо большое! Теперь всё удобно отображается.
    Теперь ещё один вопрос:
    Теперь ответ у нас как многомерный массив http://prntscr.com/gebfl5 , но получить доступ к элементам у меня не выходит.
    Пытался сделать как-то так

    PHP:
    1. echo $json_decode->{'1'};
    2. или
    3. echo $json_decode[0][1];
    и тому подобные варианты(это то что удалось нагуглить)
    Но результата я не получил.
    Прошу совета.
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @sentance, ну так на свой массив посмотри для начала
    PHP:
    1. echo $json_decode[0][0]["prop_kind"];
     
  8. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Не работает(var_dump показывает NULL)
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    А, тьфу, ты же array_values на кой-то чёрт делаешь. Убери array_values, и покажи ещё раз дамп массива.
     
  10. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    http://prntscr.com/gebqvy

    Код (Text):
    1. $POST = array (
    2.     "version" => $version,
    3.     "company" => $company,
    4.     "access_key" => $access_key,
    5.     "access_password" => $access_password,
    6.     "deal" => $deal,
    7.     "property" => $property,
    8.     "country_id" => $country_id,
    9.     "region_id" => $region_id,
    10.     "locality_id" => $locality_id
    11.     );
    12.  
    13. // Устанавливаем соединение
    14. $ch = curl_init();
    15. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    16. curl_setopt($ch, CURLOPT_POST, 1);
    17. curl_setopt($ch, CURLOPT_POSTFIELDS, $POST);
    18. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    19. curl_setopt($ch, CURLOPT_URL,
    20.     'http://re.plektan.com/ru/API_serp/search');
    21. $result = curl_exec($ch);
    22. $json_decode = json_decode($result, true);
    23.  
    24. // echo '<pre>';
    25. // print_r(array_values($json_decode));
    26. // echo '</pre>';
    27.  
    28.  
    29. var_dump($json_decode);
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    всё должно работать. Объектов там нет. Только многомерный массив.
     
  12. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Какой вариант покажет данные?
    PHP:
    1. echo $json_decode[0][0]["prop_kind"];
    этот запрос ничего не показывает
     
  13. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    PHP:
    1. echo $json_decode[0][0]['prop_kind'];
    А такой? (одинарные кавычки)
     
  14. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Увы, но тоже ничего(
    Вроде доступ к значениям с одинарными скобками.
     
  15. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    если не выводит то должно быть предупреждение underfiend index... Есть?
    --- Добавлено ---
    Ошибки включи.
    --- Добавлено ---
    PHP:
    1. error_reporting(E_ALL); //Вот такую штуку в начало скрипта.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @sentance, ещё раз. Сделай дамп без array_values, чтоб мы правильную картину видели:
    PHP:
    1. echo "<pre>" . var_export($json_decode, 1) . "</pre>";
     
  17. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Notice: Undefined offset: 0 in C:\OpenServer\domains\rav.ru\index.php on line 43

    Код (Text):
    1. echo "<pre>" . var_export($json_decode, 1) . "</pre>";

    http://prntscr.com/gec6fc
     
  18. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    PHP:
    1. echo $json_decode['data'][0]['prop_kind']; // должно вывести "несданный новострой"
    2. echo $json_decode['data'][0]['media'][0]['src']; // должно вывести ссылку на картинку, которую не могу скопировать
     
  19. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Есть! Супер. Огромное спасибо.
     
  20. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Подскажите пожалуйста, как мне разобрать весь массив данных и вывести их значения?
    У меня сейчас только один вариант

    PHP:
    1. <html>
    2.  
    3. <?php include 'post.php'; ?>
    4. <img src="<? echo $json_decode['data'][0]['media'][0]['src'] ;?> ">
    5.  
    6.  
    7. </html>
    И так на каждое значение. Но я думаю что можно найти более оптимальное решение.
     
  21. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    у тебя массив не однородный. Тебе нужно вывести все картинки?
     
  22. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Мне надо сделать что-то вроде такого http://ingold.kiev.ua/
    Там не только картинки но и тект.
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
  24. sentance

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

    С нами с:
    28 авг 2017
    Сообщения:
    16
    Симпатии:
    0
    Спасибо)