[英]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.