我是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
}
]
}
任何帮助是极大的赞赏。
list是一个数组,所以你可以做echo $streamInfo['list'][0]['color'];
来获得第一个项目。
要获取列表中的所有项目,您需要遍历列表
这样的东西会得到所有颜色的数组:
$colors = array_map(function($listItem){
return $listItem['color'];
},$streamInfo['list']);
var_dump($colors); // returns ['blue','red','green'];
你的json输入的问题似乎是list
子阵列的结构根据它包含的项目而改变。要确定访问子数组数据的正确方法,您只需要检查id
或color
是否是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