繁体   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