Добрый день уважаемые форумчане. Помогите пожалуйста, решить следующую задачу. Есть база с которой по моим запросам я получаю объекты недвижимости в json формате. Мне эти объекты необходимо выводить пользователю согласно запроса. Как я понимаю, - необходимо распарсить получаемый json в объект или массив и с массива вытащить данные в переменные и эти переменные подставить на страницу пользователю. Но сделать это не выходит. Прошу помощи в разборе объекта(или массива) на переменные или же уроки где рассматривается данная тема. PHP: $version = "****"; $company = "*****"; $deal = "sell"; $property = "flat"; $country_id = "ALL"; $access_key = "example"; $access_password = "example"; $region_id = "example"; $locality_id = "example"; // Создаём POST-запрос $POST = array ( "version" => $version, "company" => $company, "access_key" => $access_key, "access_password" => $access_password, "deal" => $deal, "property" => $property, "country_id" => $country_id, "region_id" => $region_id, "locality_id" => $locality_id ); // Устанавливаем соединение $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $POST); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_URL, 'http://re.plektan.com/ru/API_serp/search'); $result = curl_exec($ch); $json_decode = json_decode($result, true); print_r(array_values($json_decode)); После выполнения вышеуказанного кода, получаю такой ответ http://prntscr.com/ge28qa
Я понимаю что ответ нормальный. Я так понимаю что нужно рекурсивно по всем массивам пройтись и значения подставить на страницу. Но реализовать у меня на данный момент это не выходит.
А зачем рекурсивно? Выглядит, как будто двойного foreach достаточно. Выведи с человеческим форматированием print_r, будет видно (тег pre или исходный код страницы)
Спасибо большое! Теперь всё удобно отображается. Теперь ещё один вопрос: Теперь ответ у нас как многомерный массив http://prntscr.com/gebfl5 , но получить доступ к элементам у меня не выходит. Пытался сделать как-то так PHP: echo $json_decode->{'1'}; или echo $json_decode[0][1]; и тому подобные варианты(это то что удалось нагуглить) Но результата я не получил. Прошу совета.
А, тьфу, ты же array_values на кой-то чёрт делаешь. Убери array_values, и покажи ещё раз дамп массива.
http://prntscr.com/gebqvy Код (Text): $POST = array ( "version" => $version, "company" => $company, "access_key" => $access_key, "access_password" => $access_password, "deal" => $deal, "property" => $property, "country_id" => $country_id, "region_id" => $region_id, "locality_id" => $locality_id ); // Устанавливаем соединение $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $POST); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_URL, 'http://re.plektan.com/ru/API_serp/search'); $result = curl_exec($ch); $json_decode = json_decode($result, true); // echo '<pre>'; // print_r(array_values($json_decode)); // echo '</pre>'; var_dump($json_decode);
Какой вариант покажет данные? PHP: echo $json_decode[0][0]["prop_kind"]; этот запрос ничего не показывает
если не выводит то должно быть предупреждение underfiend index... Есть? --- Добавлено --- Ошибки включи. --- Добавлено --- PHP: error_reporting(E_ALL); //Вот такую штуку в начало скрипта.
@sentance, ещё раз. Сделай дамп без array_values, чтоб мы правильную картину видели: PHP: echo "<pre>" . var_export($json_decode, 1) . "</pre>";
Notice: Undefined offset: 0 in C:\OpenServer\domains\rav.ru\index.php on line 43 Код (Text): echo "<pre>" . var_export($json_decode, 1) . "</pre>"; http://prntscr.com/gec6fc
PHP: echo $json_decode['data'][0]['prop_kind']; // должно вывести "несданный новострой" echo $json_decode['data'][0]['media'][0]['src']; // должно вывести ссылку на картинку, которую не могу скопировать
Подскажите пожалуйста, как мне разобрать весь массив данных и вывести их значения? У меня сейчас только один вариант PHP: <html> <?php include 'post.php'; ?> <img src="<? echo $json_decode['data'][0]['media'][0]['src'] ;?> "> </html> И так на каждое значение. Но я думаю что можно найти более оптимальное решение.
PHP: foreach ($json_decode["data"] as $flat) { echo $flat["deal"], "<br>", $flat["property"],"<br>", $flat["prop_kind"]; } https://secure.php.net/manual/ru/language.types.array.php - читай до полного понимания