从json中获取属性的正确方法


Proper way to get attribute from json

 <?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属性为"喜欢"的所有对象的适当代码是什么?

Json可以从这里下载

这实际上取决于.json对象的内容。但最有可能的是,未定义的偏移量是由于不是所有的$getlikes[$key]都有一个'type'的数组键引起的。在比较之前验证以确保它存在。试着

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

基于你的。json文件,你只是添加了一个额外的键,这是不需要的。更改代码以反映正确的调用。检查是否设置了值仍然是个不错的主意。尝试对正在使用的文件执行var_dump($getlikes),以便更好地了解正在迭代的内容。

给出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逐个提取元素