如何在PHP流中获取多个项目?

问题描述 投票:0回答:2

我是PHP的新手,我试图回应流的内容。如果没有重复项,我可以获取内容,但如果有重复项,我会收到错误,

Notice: Undefined Index

这是我的代码,

<?php

     $url = "stream.php";

     $json = file_get_contents($url);
     $streamInfo = json_decode($json,true)

     echo $streamInfo["docID"];

?>

这输出,

451287

但是,当我尝试echo $streamInfo[list][color];时,它给了我错误:

Notice: Undefined Index 'color'

这是stream.php文件,我无法编辑此文件的内容。

{
  "docID": 451287,

  "list": [
     {
       "id": 85,
       "color": blue
     },
     {
       "id": 47,
       "color": red
     },
     {
       "id": 12,
       "color": green
     }
   ]
}

任何帮助是极大的赞赏。

php html
2个回答
1
投票

list是一个数组,所以你可以做echo $streamInfo['list'][0]['color'];来获得第一个项目。

要获取列表中的所有项目,您需要遍历列表

这样的东西会得到所有颜色的数组:

$colors = array_map(function($listItem){
    return $listItem['color'];
},$streamInfo['list']);

var_dump($colors); // returns ['blue','red','green'];

0
投票

你的json输入的问题似乎是list子阵列的结构根据它包含的项目而改变。要确定访问子数组数据的正确方法,您只需要检查idcolor是否是list的直接键。 isset()将很快为您完成这项工作。当有多个项目时,list的直接键将为数字。在这些情况下,array_column()implode()可以很好地隔离值并生成逗号分隔的字符串。

代码:(Demo

$jsons=[
    'Single'=>'{"docID":451287,"list":{"id":77,"color":"pink"}}',
    'Multiple'=>'{"docID":451287,"list":[{"id":85,"color":"blue"},{"id":47,"color":"red"},{"id":12,"color":"green"}]}'
];

foreach($jsons as $type=>$json){
    $array=json_decode($json,true);
    if(isset($array['list']['color'])){
        echo "Type = $type, Value = {$array['list']['color']}";
    }else{
        echo "Type = $type, Values = ",implode(', ',array_column($array['list'],'color'));
    }
    echo "\n";
}

输出:

Type = Single, Value = pink
Type = Multiple, Values = blue, red, green
© www.soinside.com 2019 - 2024. All rights reserved.