0
 <?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获取属性为“like”的所有对象的正确代码是什么?

Json 可以从这里下载

4

2 回答 2

2

这实际上取决于您的 .json 对象的内容。但很可能导致未定义的偏移量,因为并非所有 $getlikes[$key] 都具有“type”的数组键。在比较之前验证以确保它存在。尝试

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

编辑:

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

于 2013-03-15T01:56:19.900 回答
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 一个一个地提取元素。

于 2013-03-15T02:17:47.520 回答