2016-03-09 120 views
3

嘗試從CURL JSON響應中回顯兩個值,因此我可以將它們放入foreach循環中,但我只能獲取單個索引值才能工作。從CURL JSON響應php數組獲取特定值

$request = curl_init($api); // initiate curl object 
curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response 
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1) 
//curl_setopt($request, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment if you get no gateway response and are using HTTPS 
curl_setopt($request, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/x-www-form-urlencoded" 
)); 

$response = (string)curl_exec($request); // execute curl fetch and store results in $response 

curl_close($request); // close curl object 

$result = json_decode($response, true); // true turns it into an array 
echo 'First Name: ' . $result['first_name'] . '<br />'; // why doesnt this work 
echo 'Last Name: ' . $result[0]['last_name'] . '<br />'; // yet i can return the first value 

例陣列輸出

Array 
(
    [0] => Array 
     (
      [id] => 34761 
      [first_name] => A 
      [last_name] => Bailes 
      [clinic] => 
      [phone] => 7409923279 
      [fax] => 7409926740 
      [address1] => 507 Mulberry Heights Rd 
      [address2] => 
      [city] => Pomeroy 
      [subdivision] => OH 
      [country_code] => 
      [postal_code] => 45769-9573 
      [timezone] => Array 
       (
        [timezone_type] => 3 
        [timezone] => America/New_York 
       ) 

      [state] => OH 
     ) 
) 

我有JSON解碼設置爲true陣列輸出

$result = json_decode($response, true); // true turns it into an array 

但是當我嘗試來呼應 '如first_name' 值它只返回空。

echo 'First Name: ' . $result['first_name'] . '<br />'; // why doesnt this work 

但我可以返回一個索引值

echo 'First Name: ' . $result[0]['first_name'] . '<br />'; 

我到底做錯了什麼?

+1

'$結果[0] [ 'FIRST_NAME']'是正確的。查看你的數組結構。否則,你可以設置'$ result = json_decode($ response,true)[0]'(在php> = 5.5) – fusion3k

+1

有什麼問題。你正在通過'$ result [0] ['first_name']'獲得值? '$ result'是一個包含1個元素的數組,其中是您的關聯塊。 – LightNight

回答

2

您的結果數組嵌套2深。 $result是一個數組數組。所以:

$result[0]['first_name'] 

foreach ($result as $r) { 
    echo $r['first_name']; 
} 
+0

對不起,我不理解。 $ result [0] ['first_name']有效,但只會得到一個結果,即索引中的第一個結果。我需要在foreach循環中輸出所有結果,但我只想要特定的例如first_name值。當我在foreach循環foreach中使用它時($ result爲$ r){ echo $ r ['first_name']; }我得到空結果(沒有顯示)。 – markbarabus

+0

這很奇怪。 'foreach'應該可以工作。我建議通過調試器運行它並檢查值。 –

+0

原來,這是一個未定義的索引錯誤,因爲我之前有$ result ['first_name']。這一直是我的問題。 foreach循環現在工作。謝謝。 – markbarabus