Приходит строка JSON: Код (Text): {"total":2,"docs":[{"id":"1027700070518","ТипДокумента":"ul","НаимЮЛСокр":"ПАО \"ГАЗПРОМ\"","НаимЮЛПолн":"ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ГАЗПРОМ\"","Активность":"Действующее","ИНН":"7736050003","КПП":"772801001","ОбрДата":"25.02.1993","Адрес":"117420, г Москва, улица Намёткина, дом 16","КодОКВЭД":"46.71","НаимОКВЭД":"Торговля оптовая твердым, жидким и газообразным топливом и подобными продуктами","Руководитель":["Миллер Алексей Борисович"]},{"id":"1061515009555","ТипДокумента":"ul","НаимЮЛСокр":null,"НаимЮЛПолн":"ГАЗПРОМ ОАО","Активность":"Ликвидировано","ИНН":"7736050003","КПП":"151541001","ОбрДата":"02.06.2002","Адрес":"респ Северная Осетия - Алания, город Владикавказ","КодОКВЭД":null,"НаимОКВЭД":null,"Руководитель":null}]} Видно, что список руководителей хранится во вложенном массиве. Остальные поля вытаскиваю так: PHP: $data = json_decode($spisok); foreach($data->docs as $v){ echo $v->{'ИНН'}; ... echo $v->{'НаимОКВЭД'}; А вот руководителей не могу вытащить: PHP: echo $data->docs->{'Руководитель'[0]} ;
так я уже пробовал - не выводит в этом поле ничего: PHP: $data = json_decode($spisok); foreach($data->docs as $v){ $Spisok_Comp .= '<b>ИНН</b> '.$v->{'ИНН'}.'<br><b>ОГРН</b> '.$v->id.' <br><b>Наименование</b> '.$v->{'НаимЮЛПолн'}.' <br><b>Активность</b> '.$v->{'Активность'}.'<br><b>КПП</b> '.$v->{'КПП'}.'<br><b>Дата образования</b> '.$v->{'ОбрДата'}.'<br><b>Адрес регистрации</b> '.$v->{'Адрес'}.'<br><b>Код ОКВЭД</b> '.$v->{'КодОКВЭД'}.'<br><b>НаимОКВЭД</b> '.$v->{'НаимОКВЭД'}.'<br><b>Руководcтво</b> '. $data->docs->{'Руководитель'}[0]; }
судя по вашей строке - Руководитель вообще не массив, и потому обращаться к нему по индексу бессмысленно просто - PHP: echo $data->docs->{'Руководитель'}
как не массив?! А квадратные скобки? просто в примере только один элемент. возможно бывают и с двумя руководителями предприятия. --- Добавлено --- echo$data->docs->{'Руководитель'} - так тоже пробовал, ничего не выводит естественно.
а почему у вас тут так, а для руководителя по другому? PHP: $v->{'НаимОКВЭД'}.'<br><b>Руководcтво</b> '. $data->docs->{'Руководитель'}[0] наверное PHP: $v->{'Руководитель'}[0]
да, вы правы, сейчас гораздо лучше ! Ну а если там будет несколько элементов? как их перебрать? на всякий случай...
работает, но ругается: Миллер Алексей Борисович, Иванов Warning: implode(): Invalid arguments passed PHP: foreach($data->docs as $v){ $Spisok_Comp .= '<b>ИНН</b> '.$v->{'ИНН'}.'<br><b>ОГРН</b> '.$v->id.' <br><b>Наименование</b> '.$v->{'НаимЮЛПолн'}.' <br><b>Активность</b> '.$v->{'Активность'}.'<br><b>КПП</b> '.$v->{'КПП'}.'<br><b>Дата образования</b> '.$v->{'ОбрДата'}.'<br><b>Адрес регистрации</b> '.$v->{'Адрес'}.'<br><b>Код ОКВЭД</b> '.$v->{'КодОКВЭД'}.'<br><b>НаимОКВЭД</b> '.$v->{'НаимОКВЭД'}.'<br><b>Руководcтво</b> '; $f = implode($v->{",",'Руководитель'} ); $Spisok_Comp .= $f; } так тоже ругается: $f = implode($v->{'Руководитель'},"," ); наверное имплоде не любит обьекты.
Имплоде жутко не любит когда скопипастить даже не могут, а ещё не любит когда вместо массива подсовывают что то другое, например null Потому - сначала надо проверить, а массив ли это вообще... Но если и это покажу - вы должны будете меня на полставки устроить к себе )))
ну это я пробовал по разному.. все равно ругается. но все равно спасибо, буду разбираться! json: ..,"Руководитель":["Миллер Алексей Борисович","Иванов"]} PHP: foreach($data->docs as $v){ $Spisok_Comp .= '<b>ИНН</b> '.$v->{'ИНН'}.'<br><b>ОГРН</b> '.$v->id.' <br><b>Наименование</b> '.$v->{'НаимЮЛПолн'}.' <br><b>Активность</b> '.$v->{'Активность'}.'<br><b>КПП</b> '.$v->{'КПП'}.'<br><b>Дата образования</b> '.$v->{'ОбрДата'}.'<br><b>Адрес регистрации</b> '.$v->{'Адрес'}.'<br><b>Код ОКВЭД</b> '.$v->{'КодОКВЭД'}.'<br><b>НаимОКВЭД</b> '.$v->{'НаимОКВЭД'}.'<br><b>Руководcтво</b> '; $vse = implode(",",$v->{'Руководитель'}); $Spisok_Comp .= $vse; } вывод: Руководcтво Миллер Алексей Борисович,Иванов Warning: implode(): Invalid arguments passed in ..
Разобрался, оказывается в оригинальном JSONe может приходить массив, а может быть NULL. Создал тестовый JSON: Код (Javascript): {"total":3,"docs":[ {"id":"1027700070518","ТипДокумента":"ul","НаимЮЛСокр":"ПАО \"ГАЗПРОМ\"","НаимЮЛПолн":"ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ГАЗПРОМ\"","Активность":"Действующее","ИНН":"7736050003","КПП":"772801001","ОбрДата":"25.02.1993","Адрес":"117420, г Москва, улица Намёткина, дом 16","КодОКВЭД":"46.71","НаимОКВЭД":"Торговля оптовая твердым, жидким и газообразным топливом и подобными продуктами","Руководитель":["Миллер Алексей Борисович"]}, {"id":"1027700070518","ТипДокумента":"ul","НаимЮЛСокр":"ПАО \"ГАЗПРОМ\"","НаимЮЛПолн":"ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ГАЗПРОМ\"","Активность":"Действующее","ИНН":"7736050003","КПП":"772801001","ОбрДата":"25.02.1993","Адрес":"117420, г Москва, улица Намёткина, дом 16","КодОКВЭД":"46.71","НаимОКВЭД":"Торговля оптовая твердым, жидким и газообразным топливом и подобными продуктами","Руководитель":["Миллер Алексей Борисович", "Иванов Иван Иванович"]}, {"id":"1061515009555","ТипДокумента":"ul","НаимЮЛСокр":null,"НаимЮЛПолн":"ГАЗПРОМ ОАО","Активность":"Ликвидировано","ИНН":"7736050003","КПП":"151541001","ОбрДата":"02.06.2002","Адрес":"респ Северная Осетия - Алания, город Владикавказ","КодОКВЭД":null,"НаимОКВЭД":null,"Руководитель":null} ]} PHP: foreach($data->docs as $v){ $Spisok_Comp .= '<b>ИНН</b> '.$v->{'ИНН'}.'<br><b>ОГРН</b> '.$v->id.' <br><b>Наименование</b> '.$v->{'НаимЮЛПолн'}.' <br><b>Активность</b> '.$v->{'Активность'}.'<br><b>КПП</b> '.$v->{'КПП'}.'<br><b>Дата образования</b> '.$v->{'ОбрДата'}.'<br><b>Адрес регистрации</b> '.$v->{'Адрес'}.'<br><b>Код ОКВЭД</b> '.$v->{'КодОКВЭД'}.'<br><b>НаимОКВЭД</b> '.$v->{'НаимОКВЭД'}.'<br><b>Руководcтво</b> '; $ff = $v->{'Руководитель'}; var_dump ( $ff); //$f = array(); кстати обьявлял как массив, но имплоде все равно ругался if (is_array($ff)) $f = implode(",", $ff); else $f = $ff; $Spisok_Comp .= $f; } Результат (только руководство): Руководcтво Миллер Алексей Борисович Руководcтво Миллер Алексей Борисович,Иванов Иван Иванович Руководcтво Спасибо, что уделили мне время --- Добавлено --- Насчет полставки, я не против. Обращайтесь в личку.
я делаю так: PHP: $data = json_decode($spisok, true); var_dump ($spisok); второй параметр в тру и будет ассоциативный массив без шаманства
да... я знаю про этот параметр, но че то пока еще не заметил преимуществ работы с массивами, нежели с обьектами. может быть в дальнейшем этот параметр где-то упростит программу.
Человеку, который спрашивает на форуме (сам не может разобраться) про это: лучше не подходить к ООП. Учись писать в процедурном стиле. До ООП еще доберешься.