簡體   English   中英

使用PHP解析/遍歷JSON

[英]Parse/traverse JSON with PHP

在PHP中解析此JSON之后,如何在不使用foreach情況下訪問特定值?

[
    {
        "currency": "CAD",
        "exchange": "1"
    },
    {
        "currency": "EUR",
        "exchange": "0.7158"
    },
    {
        "currency": "GBP",
        "exchange": "0.5131"
    },
    {
        "currency": "MXN",
        "exchange": "12.4601"
    },
    {
        "currency": "USD",
        "exchange": "0.8122"
    }
]

可以這樣嗎?

$string = file_get_contents("datas.json");
$json = json_decode($string, true);
$json['currency']['USD']['exchange'];

非常感謝你的幫助。

您在那里定義了一個對象數組,但是因為您在json_decode上使用了TRUE選項,所以它們將被轉換為數組數組,因此您需要將它們尋址為

$string = file_get_contents("datas.json");
$json = json_decode($string, true);
echo $json[0]['currency'];  // CAD
echo $json[0]['exchange'];  // 1

如果要使用貨幣名稱作為鍵,則必須更改json數據文件的數據結構。

如果不想在代碼中看到foreach ,可以使用array_search()

$key = array_search("USD", array_column($json, "currency"));
echo $json[$key]['exchange'];

但是,要找到確切的值,您需要反復遍歷數組以具有完全匹配的值。

json_decode()獲得的數據中的第一個索引是數字,從零開始。 如果要直接訪問提到GBP的部分,則必須對其進行迭代,而不能直接進行。

您必須至少執行一次,才能創建更適合您的需求的數據結構,並避免重復多次。

我當時在考慮是否有可能將數據填充到一個智能對象中,該對象將試圖避免迭代,但是我沒有找到一個明顯的解決方案。 您必須解釋為什么至少重復一次不做您想要的事情,或者為什么它有您負擔不起的缺點。 以五種貨幣表示的示例數據集看起來還不錯,而且我認為世界上最多有200種貨幣。 性能和內存在這里不應該成為大問題。

這個怎么樣?

$json = json_decode($string, true);

$currency = array();

foreach($json as $arr) {
    foreach($arr as $key => $value) {
        $currency[$key] = $value;
    }
}

echo $currency['USD']; // echoes "0.8122"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM