2015-07-18 3 views
1

Ниже мой рабочий api, но результат для "echo $data" только "array" и для "echo $data["data"]["operatorid"]" ничего не гаснет. Так как преобразовать json reponse в php строку, а также получить конкретные значения из того жеjson output преобразовать в строку php

$opts = array(
'http'=>array(
'method'=>"GET", 
'header'=>"X-Mashape-Key: XXXXXXXX"    
) 
); 

$context = stream_context_create($opts); 
$res = file_get_contents('https://tariff-plan-api-datayuge.p.mashape.com/index.php?circleid=kerala&limit=50&operatorid=BSNL&recharge_type=top', false, $context); 
$data = (json_decode($res, true)); 
echo $data["data"]["operatorid"]; 

ответ JSon:

{ 
"data": [ 
{ 
    "id": "3148", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "150", 
    "recharge_talktime": "150", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 150 By BSNL", 
    "recharge_longdesc": "Full Talktime (offer valid upto 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
}, 
{ 
    "id": "3149", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "250", 
    "recharge_talktime": "250", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 250 By BSNL", 
    "recharge_longdesc": "Full Talktime (offer valid upto 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
}, 
{ 
    "id": "3150", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "550", 
    "recharge_talktime": "550", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 550 By BSNL", 
    "recharge_longdesc": "Full Talktime (offer valid upto 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
}, 
{ 
    "id": "3151", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "1000", 
    "recharge_talktime": "1100", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 1000 By BSNL", 
    "recharge_longdesc": "Extra Talktime (offer is valid till 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
}, 
{ 
    "id": "3152", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "1100", 
    "recharge_talktime": "1210", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 1100 By BSNL", 
    "recharge_longdesc": "Extra Talktime (offer is valid till 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
}, 
{ 
    "id": "3153", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "1500", 
    "recharge_talktime": "1650", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 1500 By BSNL", 
    "recharge_longdesc": "Extra Talktime (offer is valid till 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
}, 
{ 
    "id": "3154", 
    "operatorid": "BSNL", 
    "circleid": "Kerala", 
    "recharge_amount": "2000", 
    "recharge_talktime": "2200", 
    "recharge_validity": "Unlimited", 
    "recharge_shortdesc": "Recharge Of Rs 2000 By BSNL", 
    "recharge_longdesc": "Extra Talktime (offer is valid till 23 Mar 2015)", 
    "recharge_type": "Full Talktime" 
} 
] 
+0

Что такое echo $ data ["data"] [0] ["operatorid"] output? У вас есть несколько массивов в «данных», поэтому вам нужно будет обратиться к одному из них. – Maxxi

+0

echo $ data ["data"] [0] ["operatorid"]; – splash58

+0

Спасибо @maxxi и splash58 – user3588059

ответ

0

$data имеет многомерный массив - «данные», который сам держит несколько массивов.

echo $data["data"]["operatorid"] ничего не вернет, потому что вы не указали, какой из этих массивов вы хотите распечатать operatorid.

либо указать, какой массив вы ориентируетесь со следующими

$data["data"][*index*]["operatorid"]

или цикл через массив данных $ как так

foreach($data as $Adata){ 
    foreach($Adata as $arr){ 
     echo $arr['operatorid']; 
    } 
} 
1

Это JSON строка превращается в объект PHP, который имеет имущество, которое называется data, которое представляет собой набор объектов

Выходной сигнал от print_r()

stdClass Object 
(
    [data] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 3148 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 150 
        [recharge_talktime] => 150 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 150 By BSNL 
        [recharge_longdesc] => Full Talktime (offer valid upto 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

      [1] => stdClass Object 
       (
        [id] => 3149 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 250 
        [recharge_talktime] => 250 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 250 By BSNL 
        [recharge_longdesc] => Full Talktime (offer valid upto 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

      [2] => stdClass Object 
       (
        [id] => 3150 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 550 
        [recharge_talktime] => 550 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 550 By BSNL 
        [recharge_longdesc] => Full Talktime (offer valid upto 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

      [3] => stdClass Object 
       (
        [id] => 3151 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 1000 
        [recharge_talktime] => 1100 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 1000 By BSNL 
        [recharge_longdesc] => Extra Talktime (offer is valid till 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

      [4] => stdClass Object 
       (
        [id] => 3152 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 1100 
        [recharge_talktime] => 1210 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 1100 By BSNL 
        [recharge_longdesc] => Extra Talktime (offer is valid till 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

      [5] => stdClass Object 
       (
        [id] => 3153 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 1500 
        [recharge_talktime] => 1650 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 1500 By BSNL 
        [recharge_longdesc] => Extra Talktime (offer is valid till 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

      [6] => stdClass Object 
       (
        [id] => 3154 
        [operatorid] => BSNL 
        [circleid] => Kerala 
        [recharge_amount] => 2000 
        [recharge_talktime] => 2200 
        [recharge_validity] => Unlimited 
        [recharge_shortdesc] => Recharge Of Rs 2000 By BSNL 
        [recharge_longdesc] => Extra Talktime (offer is valid till 23 Mar 2015) 
        [recharge_type] => Full Talktime 
       ) 

     ) 

) 

Так ссылаться на отдельный элемент вам нужно будет использовать этот синтаксис

$context = stream_context_create($opts); 
$res = file_get_contents('https://tariff-plan-api-datayuge.p.mashape.com/index.php?circleid=kerala&limit=50&operatorid=BSNL&recharge_type=top', false, $context); 

$data = (json_decode($res)); 
echo $data->data[0]->operatorid; 

Это может быть проще понять, если вы используете имя переменной, кроме $data так

$jsonObj = (json_decode($res)); 
echo $jsonObj -> data[0] -> operatorid; 

Или если вы обрабатываете все события

$jsonObj = (json_decode($res)); 
foreach ($jsonObj -> data as $data) { 
    echo $data -> operatorid; 
} 
Смежные вопросы