2013-09-22 2 views
0

Im новой для JSon & PHP и у меня возникают некоторые проблемы с JSON в PHP строкуПреобразование JSON строку в PHP массив, то с помощью PHP массив

Моя строка JSON выглядит так

{"status":"OK","cards": 
[{"id":100001,"name":"batman","image":11111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-08-15T11:37:07Z"}, 
{"id":100002,"name":"superman","image":111111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-08-15T12:30:09Z"}, 
{"id":100003,"name":"catwoman","image":1111111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-08-15T12:39:42Z"}, 
{"id":100004,"name":"bane","image":1111111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-09-08T12:56:04Z"} 
]} 

So Far я создал мои строки

$json_raw = '{"status":"OK","cards": [{"id":100001,"name": ..... 

расшифровал

JSON
$arr = json_decode($json_raw, TRUE); 

I var_dump ($ arr);

затем возвращает

array(2) { ["status"]=> string(2) "OK" ["cards"]=> array(4) { [0]=> array(8) { ["id"]=> int(100001) ["name"]=> string(6) "batman" ["image"]=> int(11111) ["size"]=> int(75) ["region_id"]=> int(1) ["locked"]=> bool(false) ["status"]=> string(6) "active" ["created_at"]=> string(20) "2013-08-15T11:37:07Z" } [1]=> array(8) { ["id"]=> int(100002) ["name"]=> string(8) "superman" ["image"]=> int(111111) ["size"]=> int(75) ["region_id"]=> int(1) ["locked"]=> bool(false) ["status"]=> string(6) "active" ["created_at"]=> string(20) "2013-08-15T12:30:09Z" } [2]=> array(8) { ["id"]=> int(100003) ["name"]=> string(8) "catwoman" ["image"]=> int(1111111) ["size"]=> int(75) ["region_id"]=> int(1) ["locked"]=> bool(false) ["status"]=> string(6) "active" ["created_at"]=> string(20) "2013-08-15T12:39:42Z" } [3]=> array(8) { ["id"]=> int(100004) ["name"]=> string(4) "bane" ["image"]=> int(1111111) ["size"]=> int(75) ["region_id"]=> int(1) ["locked"]=> bool(false) ["status"]=> string(6) "active" ["created_at"]=> string(20) "2013-09-08T12:56:04Z" } } } 

Теперь все, что я хочу сделать, это быть в состоянии использовать эти данные

например, если имя = денщик тогда

Я знаю, что это глупый вопрос, но я борюсь :(

заранее благодарим

+4

Попробуйте это: 'эхо $ обр [ 'cards'] [0] ['name']; '(: – BlitZ

ответ

2

json_decode() с TRUE в качестве второго параметра дает ассоциативный массив. Вам нужно получить доступ к правильному индексу, чтобы делать то, что вы хотите.

Чтобы получить полный список ассоциативный массив с красивым форматированием, вы можете сделать:

echo '<pre>', print_r($arr), '</pre>'; 

Теперь, чтобы получить доступ к name в массиве:

$man = $arr['cards'][0]['name']; 

Чтобы проверить это Batman (яй!):

if(isset($man) && $man == 'batman') { 
    # code ... 
} 

Для получения имени всех подобных имен:

$man = $json['cards']['0']['name']; 
for ($i=0; $i < count($json['cards']); $i++) { 
    echo $json['cards'][$i]['name']."\n"; 
} 

See it live!

+0

если статус не okey, тогда ключ карты может быть пустым или отсутствовать, поэтому $ arr ['cards'] ['0'] ['name'] он скажет undefined – developerCK

+0

я сделал upvote не downvote – developerCK

+0

что это m ЕАН? – developerCK

0

Попробуйте с:

$cards = $arr['cards']; 
foreach($cards as $card) { 
    if($card['name'] == 'batman') echo 'Hello batman!'; 
} 

EDIT:

Ok, так что работал для меня usi нг код выше, попробуйте сами, если вы хотите:

<?php 

$json_raw = '{"status":"OK","cards": 
[{"id":100001,"name":"batman","image":11111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-08-15T11:37:07Z"}, 
{"id":100002,"name":"superman","image":111111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-08-15T12:30:09Z"}, 
{"id":100003,"name":"catwoman","image":1111111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-08-15T12:39:42Z"}, 
{"id":100004,"name":"bane","image":1111111,"size":75,"region_id":1,"locked":false,"status":"active","created_at":"2013-09-08T12:56:04Z"} 
]}'; 


$arr = json_decode($json_raw, TRUE); 

$cards = $arr['cards']; 
foreach($cards as $card) { 
    if($card['name'] == 'batman') echo 'Hello batman!'; 
} 

?> 
+0

Где ошибка? : S – megatxi

+0

Это был не я, но я полагаю, что это тот факт, что массивы не вложены. – bestprogrammerintheworld

+0

Я не ответил на ваш ответ, но OP имеет ассоциативный массив, и это не сработает. –

1

когда вы получили массив

$arr = json_decode($json_raw, TRUE); 

затем проверить, если карты ключ существует

if(array_key_exists('cards', $arr)){ 
    foreach($arr['cards'] as $key=>$val){ 

    echo $key; ///name, id.. 
    echo $val; /// batman,... 
    if($key == 'name' && $val =='batman'){ 
     //-------do your stuff 
    } 
    } 
} 
Смежные вопросы