JSOn内部子属性未定义索引错误

时间:2014-06-23 23:23:50

标签: php json

这是我的Json的样本

{
   "164616":{
      "competitors":{
         "950053":{
            "Name":"Hookinn",
            "Jockey":"L PILLAR(A)",
            "DetailedPricing":{
               "winTotePlus":false,
               "placeTotePlus":false,
               "placePrices":{
                  "2":0,
                  "12":0
               },
               "RisaSilkID":1551
            }
         }
      }
   }
}

这是我的代码。

$string = file_get_contents(@"D:/test.json");
$json_a=json_decode($string,true);

    foreach ($json_a as $root_element => $childnode) {
        foreach( $childnode as $cKey => $subChild) {
            foreach( $subChild as $cKey2 => $subChild2) {
             echo($subChild2['Name']);  
         echo("<br>");
           foreach($subChild2['DetailedPricing'] as $compKey => $compVal) {
        //   echo($compVal['placeTotePlus']); echo("<br>");}

          }
        }
    }
}

我可以使用subChild2 [&#39; Name&#39;]获取Name属性但是当我尝试访问在DetailedPricing数组中的placeTotePlus属性时,我得到未定义的索引错误。我做错了什么?我也想获得placePrices值。

由于

1 个答案:

答案 0 :(得分:1)

你走了。

$string = json_decode($string, true);
foreach($string as $item => $comp) {

    foreach($comp as $key =>$users) {
        foreach($users as $derp=>$user) {
            var_dump($user['DetailedPricing']['placeTotePlus']);
        }
    }
}

返回:

bool(false)

Example

它不打印任何东西的原因是因为它是一个布尔值。你可以测试(,如评论中所述)这样的东西:

(!$users['DetailedPricing']['placeTotePlus']) ? 'Its false' : 'Its true';

在回复您的评论时,您会使用isset()

if(!isset($user['DetailedPricing']['PlaceTotPlus'])) {
    print 'nothing';
}