PHP和JSON - 解码数组问题?

时间:2011-11-03 21:01:46

标签: php json

我正在尝试从解码后的JSon字符串中获取一些信息到数组中。

我有这段代码:

$json_d='{ // This is just an example, I normally get this from a request...
             "iklive.com":{"status":"regthroughothers","classkey":"domcno"}
}';

$json_a=json_decode($json_d,true);
$full_domain = $domain.$tlds; // $domain = 'iklive' ; $tlds = '.com'

echo $json_a[$full_domain][status];

问题是,我需要获取“iklive.com”的“状态”值,但是当我执行echo $json_a[$full_domain][status];时它不起作用,但如果我手动执行echo $json_a['iklive.com'][status];(它的引用就可以了。

我尝试将引号添加到变量但没有成功,我该怎么做?

谢谢大家!


感谢Pekka和jeromegamez,我注意到这个“问题”的HTML部分出现错误,$tlds变量是“com”而不是“.com” - 抱歉浪费你的时间。我现在心疼。

无论如何,多亏了jeromegamez和Marc B,我发现除非status是一个常数我需要引用它;)你可以检查jeromegamez回答问题的详细解释和正确的调试。

对不起。

1 个答案:

答案 0 :(得分:2)

这对我有用:

<?php
$json_d='{ "iklive.com":{"status":"regthroughothers","classkey":"domcno"} }';
$json_a = json_decode($json_d, true);

if (!is_array($json_a)) {
    echo "\$json_d is not a valid JSON array\n";
}

$domain = "iklive";
$tld = ".com";
$full_domain = $domain . $tld;

if (!isset($json_a[$full_domain])) {
    echo "{$full_domain} is not set in \$json_a\n";
} else {
    echo $json_a[$full_domain]['status']."\n";
}

我做了什么:

  • json_a[$full_domain][status]更改为json_a[$full_domain]['status'] - status周围缺少的引号不会破坏您的脚本,但会引发Notice: Use of undefined constant status - assumed 'status'
  • 添加了检查解码后的JSON是否实际上是一个数组
  • 添加了检查$full_domain
  • 中是否设置了密钥$json_a