Здравствуйте, с сайта приходит JSON с русскими полями: {"Бухгалтерский баланс":{"Актив":{"I. ВНЕОБОРОТНЫЕ АКТИВЫ":{"Нематериальные активы":{"2015":"101459000","2014":"12866000","2013":"3650000","2012":"4250000","2011":"956238990000"} }}}} Я могу его раскодировать: var_dump(json_decode($json,true)); Результат: object(stdClass)#6 (1) { ["Бухгалтерский баланс"]=> object(stdClass)#5 (1) { ["Актив"]=> object(stdClass)#4 (1) { ["I. ВНЕОБОРОТНЫЕ АКТИВЫ"]=> object(stdClass)#2 (2) { ["Нематериальные активы"]=> object(stdClass)#1 (5) { ["2015"]=> string(9) "101459000" ["2014"]=> string(8) "12866000" ["2013"]=> string(7) "3650000" ["2012"]=> string(7) "4250000" ["2011"]=> string(12) "956238990000" } ["Основные средства"]=> object(stdClass)#3 (5) { ["2015"]=> string(13) "1084316376000" ["2014"]=> string(13) "1063007530000" ["2013"]=> string(13) "1003457628000" ["2012"]=> string(12) "973476843000" ["2011"]=> string(12) "956238990000" } } } } } Или в массив: var_dump(json_decode($json,true)); Результат: array(1) { ["Бухгалтерский баланс"]=> array(1) { ["Актив"]=> array(1) { ["I. ВНЕОБОРОТНЫЕ АКТИВЫ"]=> array(2) { ["Нематериальные активы"]=> array(5) { [2015]=> string(9) "101459000" [2014]=> string(8) "12866000" [2013]=> string(7) "3650000" [2012]=> string(7) "4250000" [2011]=> string(12) "956238990000" } ["Основные средства"]=> array(5) { [2015]=> string(13) "1084316376000" [2014]=> string(13) "1063007530000" [2013]=> string(13) "1003457628000" [2012]=> string(12) "973476843000" [2011]=> string(12) "956238990000" } } } } } Могу вытащить любое значение по ключу: $data = json_decode( $json,true); echo $data["Бухгалтерский баланс"]["Актив"]["I. ВНЕОБОРОТНЫЕ АКТИВЫ"]["Нематериальные активы"]["2015"]; Результат: 101459000 Искал весь день, но не нашел, как же получить доступ по русским полям, если нужно в цикле вытаскивать данные вот так: Бухгалтерский баланс 2015 2014 2013 2012 2011 Актив I. ВНЕОБОРОТНЫЕ АКТИВЫ Нематериальные активы 101 459 000,00 12 866 000,00 3 650 000,00 4 250 000,00 4 876 000,00 Основные средства 1 084 316 376 000,00 1 063 007 530 000,00 1 003 457 628 000,00 973 476 843 000,00 956 238 990 000,00 Подскажите пожалуйста конструкцию при которой получается такой вид. Ругается у меня foreach на русские поля :-(
я сделал в лоб, через переменные, тогда перестало ругаться. Так правильно? Подскажите пожалуйста как код упростить, в смысле, чтобы в цикле выводить по годам и названия полей брать из JSON. (это моя первая программа на PHP и я просмотрел сегодня сотню сайтов про PHP но пока не нашел подобные примеры, чтоб с кирилическими полями.) PHP: $data = json_decode($json);// обьект правильно? или с массивом лучше сделать? $bbalans= "Бухгалтерский баланс"; $activ= "Актив"; $vneob= "I. ВНЕОБОРОТНЫЕ АКТИВЫ"; $nemat= "Нематериальные активы"; $osnov= "Основные средства"; echo $bbalans.' 2015 2014 2013 2012 2011'.'<br>'; echo $activ.'<br>'; echo $vneob.'<br>'; echo $nemat.' '; $year=2015; echo $data->$bbalans->$activ->$vneob->$nemat->$year.' '; $year=2014; echo $data->$bbalans->$activ->$vneob->$nemat->$year.' '; $year=2013; echo $data->$bbalans->$activ->$vneob->$nemat->$year.' '; $year=2012; echo $data->$bbalans->$activ->$vneob->$nemat->$year.' '; $year=2011; echo $data->$bbalans->$activ->$vneob->$nemat->$year.'<br>'; echo $osnov.' '; $year=2015; echo $data->$bbalans->$activ->$vneob->$osnov->$year.' '; $year=2014; echo $data->$bbalans->$activ->$vneob->$osnov->$year.' '; $year=2013; echo $data->$bbalans->$activ->$vneob->$osnov->$year.' '; $year=2012; echo $data->$bbalans->$activ->$vneob->$osnov->$year.' '; $year=2011; echo $data->$bbalans->$activ->$vneob->$osnov->$year.'<br>'; JSON (некоторые данные отсутствуют - null, это норм.): {"Бухгалтерский баланс":{"Актив":{"I. ВНЕОБОРОТНЫЕ АКТИВЫ":{"Нематериальные активы":{"2015":"2291000","2014":"2590000","2013":"797000","2012":"0","2011":null},"Основные средства":{"2015":"0","2014":"16000","2013":"45000","2012":"74000","2011":null}... Результат: Бухгалтерский баланс 2015 2014 2013 2012 2011 Актив I. ВНЕОБОРОТНЫЕ АКТИВЫ Нематериальные активы 2291000 2590000 797000 0 Основные средства 0 16000 45000 74000
Я понял тебя, он ругается не на русский язык. В utf-8 ему по-моему пофиг какой язык Ему не нравятся пробелы, поэтому там нужно юзать фигурный синтаксис. PHP: foreach($data->{"Бухгалтерский баланс"}->Актив->{"I. ВНЕОБОРОТНЫЕ АКТИВЫ"}->{"Нематериальные активы"} as $year =>$summa){ print $summa."\n"; } Разберешься теперь
Огромное спасибо! Я пробовал фигурные скобки, но почему то не получилось. Прошу номер карты в ЛС. Отблагодарю и еще просьбы будут посложнее. Ибо foreach я никогда не пойму уже. Вот что получилось, в смысле заработало на сайте у меня: PHP: <?php $page = (@$_GET['page']) ? $_GET['page'] : 1; if (@$_GET["id"]) { $params["id"] = $_GET["id"]; $id = $_GET["id"]; if (@$_GET["fs"]) $url = "https://intechbank.ru/v5/data/fs"; else $url = "https://intechbank.ru/v5/data/card"; } elseif (@$_GET["search"]) { $params["string"] = $_GET["search"]; $url = "https://intechbank.ru/v5/data?page=".$page; } else { $params["string"] = ""; $url = "https://intechbank.ru/v5/data?page=".$page; } $params["api_key"] = "xyIRQGFCCTnWSrWyonUt0_eqCOtqNoI"; $params["ip_client"] = $_SERVER["REMOTE_ADDR"]; $opts = array("http" => array( "method" => "POST", "header" => "Content-type: application/x-www-form-urlencoded", "content" => http_build_query($params), "ignore_errors" => true )); // ищем файл с таким ОГРН в кэше $filename = "CACHE/".$id.".txt"; if (file_exists($filename)) { echo "Файл с ОГРН $id существует, берем из кэша".'<br>'; $json = file_get_contents($filename); } else { echo "Файл c ОГРН $id не существует, делаем запрос".'<br>'; try { $json = file_get_contents($url, false, stream_context_create($opts)); } catch (Exception $e) { echo "Выброшено исключение: ", $e->getMessage(), "\n"; } // и добавляем файл в кэш $file = fopen($filename, "w"); flock($file, LOCK_EX); fwrite($file, $json); flock($file, LOCK_UN); fclose($file); } echo $json; echo '<hr>'; $data = json_decode($json); $bbalans= "Бухгалтерский баланс"; $activ= "Актив"; $vneob= "I. ВНЕОБОРОТНЫЕ АКТИВЫ"; $nemat= "Нематериальные активы"; $osnov= "Основные средства"; echo $bbalans.' 2015 2014 2013 2012 2011'.'<br>'; echo $activ.'<br>'; echo $vneob.'<br>'; echo $nemat.' '; foreach($data->{"Бухгалтерский баланс"}->Актив->{"I. ВНЕОБОРОТНЫЕ АКТИВЫ"}->{"Нематериальные активы"} as $year =>$summa){ print $summa."\n"; } echo '<br>'; echo '<br>'; echo $osnov.' '; foreach($data->{"Бухгалтерский баланс"}->Актив->{"I. ВНЕОБОРОТНЫЕ АКТИВЫ"}->{"Основные средства"} as $year =>$summa){ print $summa."\n"; } echo '<br>'; ?> Мой первый опыт на РНР - с утра сижу-пишу, а щас уже 3:44 - теперь можно и спать, СПАСИБО!
Это пустяк ерундовый, так что меня вполне устроит благодарность в виде нажатого пальца вверх. Если есть, что реально посложнее на php за денежку, то пиши в личку обсудим ) Или тут есть раздел с фрилансом. Напишешь ТЗ, может и исполнители поопытней найдутся )