2013-02-23 3 views
12

Я вернулся массив JSON типа данных от javascript к PHP, я использовал json_decode($data, true), чтобы преобразовать его в ассоциативный массив, но когда я пытаюсь использовать его с помощью ассоциативно index, я получаю ошибка "Undefined index" возвращаемые данные выглядит следующим образомКак получить доступ к JSON декодированного массива в PHP

array(14) { [0]=> array(4) { ["id"]=> string(3) "597" ["c_name"]=> string(4) "John" ["next_of_kin"]=> string(10) "5874594793" ["seat_no"]=> string(1) "4" } 
[1]=> array(4) { ["id"]=> string(3) "599" ["c_name"]=> string(6) "George" ["next_of_kin"]=> string(7) "6544539" ["seat_no"]=> string(1) "2" } 
[2]=> array(4) { ["id"]=> string(3) "601" ["c_name"]=> string(5) "Emeka" ["next_of_kin"]=> string(10) "5457394839" ["seat_no"]=> string(1) "9" } 
[3]=> array(4) { ["id"]=> string(3) "603" ["c_name"]=> string(8) "Chijioke" ["next_of_kin"]=> string(9) "653487309" ["seat_no"]=> string(1) "1" } 

Пожалуйста, как получить доступ к такому массиву в PHP? Спасибо за любое предложение.

+0

Вы обращаетесь к нему, как и к любому другому массиву, потому что это просто массив. Неважно, откуда оно взялось. Если вы получите сообщение об ошибке, это означает, что ключ, к которому вы пытаетесь получить доступ, не существует. Итак, дважды проверьте, существует ли ключ, к которому вы хотите получить доступ. Если вы новичок в массивах на PHP, посмотрите документацию: http://php.net/manual/en/language.types.array.php. –

+1

можете ли вы добавить код, в котором вы пытаетесь получить доступ к элементам? (и очистить массив, чтобы его было легче читать) – Brad

ответ

48

Как вы передаете true в качестве второго параметра json_decode, в приведенном выше примере вы можете получить данные делать что-то похожее на:

$myArray = json_decode($data, true); 
echo $myArray[0]['id']; // Fetches the first ID 
echo $myArray[0]['c_name']; // Fetches the first c_name 
// ... 
echo $myArray[2]['id']; // Fetches the third ID 
// etc.. 

Если вы НЕ передаете true в качестве второго параметра в json_decode, он вместо этого вернет его как объект:

echo $myArray[0]->id; 
3
$data = json_decode(...); 
$firstId = $data[0]["id"]; 
$secondSeatNo = $data[1]["seat_no"]; 

Так же, как это :)

+0

Когда я пытаюсь получить доступ к этому пути, я получаю сообщение об ошибке «Нельзя использовать объект типа stdClass as array». – Chibuzo

+0

Тогда вы фактически не разбираете данные как ассоциативный массив. См. Мой обновленный ответ. – Norguard

7
$data = json_decode($json, true); 
echo $data[0]["c_name"]; // "John" 


$data = json_decode($json); 
echo $data[0]->c_name;  // "John" 
0

Если вы хотите, чтобы петли в массив нескольких измерениях, вы можете использовать Еогеасп так:

foreach($data as $users){ 
    foreach($users as $user){ 
     echo $user['id'].' '.$user['c_name'].' '.$user['seat_no'].'<br/>'; 
    } 
} 
+0

Как бы затем декодировать почасовые данные из https: //api.forecast.io/forecast/...? Я пробовал все, но не могу получить дополнительный массив – andrebruton

+0

Какой формат json-результата? Вы вызываете службу с помощью javascript? –

0

Как вы передаете верно в качестве второго параметра json_decode, в приведенном выше примере вы может извлекать данные, делающие что-то похожее на:

<?php 
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 

var_dump(json_decode($json)); 
var_dump(json_decode($json, true)); 

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