使用PHP解析/遍历JSON

时间:2015-06-23 00:18:30

标签: php json

在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'];

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:2)

你在那里定义了一个对象数组但由于你在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数据文件的数据结构。

答案 1 :(得分:1)

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

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

但不管怎样,要找到一个确切的值,你需要迭代数组才能完全匹配。

答案 2 :(得分:0)

public class CheckID { public static String msgt; String cU = "zihan"; String cP = "123"; CheckID(String tx ,String px){ if(tx==cU && px ==cP) { msgt = "Welcome to messenger"; } else { msgt = "Sorry! Wrong Password/Email"; } } 获取的数据中的第一个索引是数字,从零开始。如果您打算直接访问提到GBP的部分,您必须迭代它,不能直接进行。

您必须至少执行一次才能创建更适合您需求的数据结构,并避免多次迭代。

我在考虑是否可以将数据填充到一个试图避免迭代的智能对象中,但我没有找到明显的解决方案。你必须解释为什么迭代至少一次不会做你想要的,或者为什么它有你无法负担的缺点。这个五种货币的数据集看起来并不太糟糕,我认为世界上最多有200种货币。性能和记忆在这里不应该成为一个大问题。

答案 3 :(得分:0)

怎么样?

$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"