Как я могу перебрать массив stdObject, не вызывая PHP уведомлений / предупреждений?
У меня есть следующий stdObject, полученный через cURL / json_decode():
stdClass Object
(
[response] => stdClass Object
(
[status] => OK
[num_elements] => 1030
[start_element] => 0
[results] => stdClass Object
(
[publisher] => stdClass Object
(
[num_elements] => 1030
[results] => Array
(
[0] => stdClass Object
(
[id] => 1234
[weight] => 4444
[name] => Pub 1
[member_id] => 1
[state] => active
[code] =>
)
[1] => stdClass Object
(
[id] => 1235
[weight] => 4444
[name] => Pub 2
[member_id] => 2
[state] => active
[code] =>
)
)
)
)
[dbg_info] => stdClass Object
(
[instance] => instance1.server.com
[slave_hit] => 1
[db] => db1.server.com
[reads] => 3
[read_limit] => 100
[read_limit_seconds] => 60
[writes] => 0
[write_limit] => 60
[write_limit_seconds] => 60
[awesomesauce_cache_used] =>
[count_cache_used] =>
[warnings] => Array
(
)
[time] => 70.440053939819
[start_microtime] => 1380833763.4083
[version] => 1.14
[slave_lag] => 0
[member_last_modified_age] => 2083072
)
)
)
Я перебираю его, чтобы получить идентификатор каждого результата:
foreach ($result->response->results->publisher->results as $object) {
$publishers .= $object->id.",";
}
И хотя код работает нормально, PHP выдает следующие уведомления / предупреждения:
Примечание PHP: попытка получить свойство необъекта в /var/www/vhosts/domain.net/script.php в строке 1 Примечание PHP: попытка получить свойство необъекта в / var / www / vhosts / domain.NET / script.php в строке 1 Предупреждение PHP: неверный аргумент указан для foreach() в /var/www/vhosts/domain.net/script.php в строке 1
Есть идеи? Заранее спасибо!
1 ответ
Возможно, вы установили второй параметр $assoc
в json_decode() для true
? Как это:
$result = json_decode($json_from_curl, true);
Таким образом, возвращается $result со всеми объектами stdClass, преобразованными в ассоциативный массив.
РЕДАКТИРОВАТЬ: Если $result
вы получаете действительно ассоциативный массив, тогда мы должны рассматривать его как таковой. Попробуйте заменить ваш foreach
с этим:
foreach ($result['response']['results']['publisher']['results'] as $arr) {
$publishers .= $arr['id'] . ",";
}
EDIT2: из моего собственного тестирования на основе вашего кода, все должно работать правильно. Уведомления / предупреждения не должны появляться. Возможно, причиной этого является какой-то другой код, не показанный в вашем вопросе.