2011-11-03 165 views
1

我試圖從解碼的JSon字符串中獲取一些信息到數組中。PHP和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];(帶引號)。

我試圖將變量添加到變量但沒有成功,我該怎麼做?

謝謝大家!


感謝佩卡和jeromegamez我注意到,在這個「問題」的HTML部分錯誤,$tlds變量是不是「COM」,「.COM」 - 用這浪費你的時間很抱歉。我現在感覺很糟糕。

無論如何,由於jeromegamez和馬克B我發現,除非status是一個常數,我需要引用它;)你可以檢查jeromegamez答案的問題和適當的調試的詳細說明。

對不起。

+0

而'$ full_domain'的值是? – Brad

+1

你確定'$ full_domain ='iklive.com'嗎? – ComFreek

+0

你是100%正面'$ full_domain'有那個值?那麼就不應該有問題。你是否記住數組索引是區分大小寫的? –

回答

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
+0

你也可以插入'json_last_error()';) – ComFreek

+0

...或單元測試:) – jeromegamez

+0

你是最棒的!通過問題發現,在發佈$ domain和$ tld變量的HTML文件中犯了一個愚蠢的錯誤。對不起,浪費你的時間夥計。無論如何,我注意到我還沒有使用'['status']'引用!謝謝! ;) – TCB13