Есть данные JSON(многомерный массив(больше трех вложенных друг в друга): https://api.trademc.org/Shop.getItems?shop=98603&v=3
{"response":{"categories":[{"id":0,"name":"Без категории","items":[{"id":382575,"type":0,"name":"test","cost":500,"description":"gertsthrsh","image":"https:\/\/i.trademc.org\/collections\/items\/_default.svg"},{"id":382576,"type":0,"name":"донат авто","cost":99999,"description":"кыеоек","image":"https:\/\/i.trademc.org\/collections\/items\/_default.svg"},{"id":382578,"type":0,"name":"487141","cost":99999,"description":"5115","image":"https:\/\/i.trademc.org\/collections\/items\/_default.svg"},{"id":382894,"type":2,"name":"банк деньги","cost":10,"description":"пыкеркрыепар","image":"https:\/\/i.trademc.org\/collections\/items\/_default.svg","game_currency_rate":10000,"fields":[{"id":"amount_of_item","placeholder":"Количество единиц валюты","flags":"d"}]},{"id":384358,"type":2,"name":"INFINITY COIN","cost":1,"description":"test by smozzy","image":"https:\/\/i.trademc.org\/shops\/2\/m\/2msY794p52.jpg","game_currency_rate":1024,"fields":[{"id":"amount_of_item","placeholder":"Количество единиц валюты","flags":"d"}]}]}]}}
Я делал так:
$strJsonFileContents = file_get_contents('https://api.trademc.org/Shop.getItems?shop=98603&v=3');
$array = json_decode($strJsonFileContents, true);
$array = array_shift($array);
$item0 = $array["categories"]["0"]["items"]["0"]["id"];
$item1 = $array["categories"]["0"]["items"]["1"]["id"];
$item2 = $array["categories"]["0"]["items"]["2"]["id"];
$item3 = $array["categories"]["0"]["items"]["3"]["id"];
$item4 = $array["categories"]["0"]["items"]["4"]["id"];
И все работало, но это ручной режим. И мне хотелось бы найти способ избирать данные из массива циклом, и если можно то желательно с пояснением, так как я новичок в PHP, просто ручная инициализация при малом количество товаров это не сложно, но когда товаров будет сотни, будут проблемы вписывать их в ручную.
Я задавал этот вопрос ранее, но в итоге, модератор посчитал что мой вопрос дубликат, и отправил сюда: Вывод данных циклом из json php
Я прошел по ссылке, попытался вникнуть и заметил то что в наших массивах есть отличия, такие как квадратные скобки [], мой массив их имеет, также он более многомерен, и он имеет неассоциацивные данные в том числе такие как [0],[1]
В итоге я сделал:
$url = 'https://api.trademc.org/Shop.getItems?shop=98603&v=3';
$jsonString = file_get_contents($url);
$getcontent = json_decode( $jsonString );
foreach ($getcontent->response->categories->items as $items) {
$item_id = $items->id;
$item_name = $items->name;
echo 'Идентификатор - '.$item_id.'; Товар - '.$item_name.'<бр>';
}
В результате получил такой ответ:
Notice: Trying to get property of non-object in /var/www/u0664962/data/www/infinitymta.ru/php/donate.php on line 4
Warning: Invalid argument supplied for foreach() in /var/www/u0664962/data/www/infinitymta.ru/php/donate.php on line 4
Может быть кто-нибудь поможет новичку, укажет на то в чем ошибка?
В ошибке же всё указано. Trying to get property of non-object
об этом $getcontent->response->categories->items
. Происходит попытка обращения к элементу массива как к объекту и получения от него свойства (которого там естессно нет в таком виде)
Если перед запуском в цикл вы разпринтите $getcontent
, то увидите структуру:
stdClass Object
(
[response] => stdClass Object
(
[categories] => Array
(
[0] => stdClass Object
(
[id] => 0
[name] => Без категории
[items] => Array
(
[0] => stdClass Object
(
[id] => 382575
[type] => 0
...
Ваш foreach
должен быть примерно таким:
foreach ($getcontent->response->categories[0]->items as $items) {
пример по вашему вопросу: http://sandbox.onlinephpfunctions.com/code/edc49bf69484312b6c10335d6363b18140eb9694
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня имеется ссылка name_1 как осуществить запуск функции name('1'); Если я раскладываю приходящие данные через explode