从json获取属性的正确方法

时间:2013-03-15 01:51:28

标签: php json decoding

 <?php
         $json_string = file_get_contents('infile.json');
         $get_json_values=json_decode($json_string,true);

            foreach ($get_json_values as $key=>$getlikes) {  
              if($getlikes[$key]['type']=='like') {

              ?>
              <div><p><?php echo $getlikes['name'] ?></p></div>
            <?php
          }}
           ?>

上面的代码中有一个错误:if行的未定义偏移量。我想这是因为$getlikes[$key]['type']错了。将type属性的所有对象设为“喜欢”的正确代码是什么?

可以从here

下载Json

2 个答案:

答案 0 :(得分:2)

这实际上取决于.json对象的内容。但很可能是由于并非所有$ getlikes [$ key]都有一个&#39; type&#39;的数组键,因此导致了未定义的偏移量。在比较之前验证以确保它存在。尝试

foreach ($get_json_values as $key=>$getlikes) { 
    if(!isset($getlikes['type'])) continue;
        if($getlikes['type']=='like') {
    ....

编辑:

根据您的.json文件,您只需添加一个不需要的附加密钥。更改了代码以反映正确的调用。检查是否设置了值仍然不是一个坏主意。尝试使用var_dump($ getlikes)或您正在使用的文件,以便更好地了解您正在迭代的内容。

答案 1 :(得分:1)

鉴于JSON字符串,很清楚你做错了什么。 $ get_json_values是一个没有索引的列表,你的密钥加倍,难以解释。这样做。

foreach ($get_json_values as $getlikes) { 
    if($getlikes['type']=='like') {

如果您使用$ key,则可以像这样使用它

foreach ($get_json_values as $key=>$getlikes) { 
    if($get_json_values[$key]['type']=='like') {

但你不会那样做。 Foreach逐个提取元素。