2015-01-24 4 views
1

PHP получает это с помощью AJAX в формате JSON (назовем его $json_string):PHP цикл через массив объектов (JSON)

[{"pid":"284","qty":"1","sn":"12"},{"pid":"284","qty":"1","sn":"23"},{"pid":"276","qty":"1","sn":"34"},{"pid":"276","qty":"1","sn":"45"},{"pid":"276","qty":"1","sn":"56"},{"pid":"281","qty":"1","sn":"57"},{"pid":"281","qty":"1","sn":"67"},{"pid":"281","qty":"1","sn":"78"}]

Я хочу перебрать массивов, например, так:

$out = '<table>'; 
$arr = json_decode($json_string); 
foreach ($arr AS $row){ 
    $out .= '<tr><td>'.$row['pid'].'</td><td>'.$row['qty'].'</td><td>'.$row['sn'].'</td></tr>'; 
} 
$out .= '</table>'; 

Я получаю сообщение об ошибке: Fatal error: Cannot use object of type stdClass as array

+0

Не означает ли это, что json_decode возвращает то, что НЕ является массивом? –

+0

@ThomasKilian Нет, но '$ arr = json_decode ($ json_string, true)' приводит к ассоциативному массиву: $ pid = $ arr ['pid']; '- тогда как просто $ $ = json_decode ($ json_string) 'приводит к простому массиву:' $ pid = $ arr [0]; 'Зависит от данных, а не только от желаемого результата. Выше приведены данные с данными. – crashwap

ответ

8

Вы должны заставить его использовать ассоциативный массив:

$arr = json_decode($json_string, true); 

Или изменить код, чтобы использовать объект обозначение для объектов:

foreach ($arr AS $row){ 
    $out .= '<tr><td>'.$row->pid.'</td><td>'.$row->qty.'</td><td>'.$row->sn.'</td></tr>'; 
} 

Лично я предпочитаю принуждая все это ассоциативный массив, потому что его легче работать, особенно, когда вы получаете в сложные вложенные структуры ,

+1

В документации json_decode указано довольно ясно: http://php.net/manual/en/function.json-decode.php – ILikeTacos

Смежные вопросы