我有如下简单的json结果
{
"code": 200,
"image": "https://example.com/image.jpg",
"result": [
{
"url": "https://example.com/1",
"label": "MP4"
},
{
"url": "https://example.com/2",
"label": "FLV"
},
{
"url": "https://example.com/3",
"label": "MP3"
},
{
"url": "https://example.com/4",
"label": "AVI"
},
{
"url": "https://example.com/5",
"label": "WMV"
}
]
}
如您所见,标签的路径太多了,有时标签的顺序与上面的不一样,它总是在变化(随机),我试图获得MP3标签的一部分,但不能。 我的问题是,如何获取带有MP3标签的json的序列?
我尝试了以下脚本
$uri = json_decode(file_get_contents('https://example.com/json.json'),TRUE);
echo $uri['result'][2]['url'];
但是如上所述,MP3标签的位置总是在变化,有没有办法克服它?
答案 0 :(得分:1)
尝试以下代码:
$nodesWithMp3Labels = array_map(function($a) {
if (strtolower($a["label"]) == "mp3") {
return $a;
}
}, $uri['result']);
详细了解array_map
对于array_map
,如果标签不是mp3,则会有一些空白值。
使用简单的foreach循环的另一种解决方案:
$nodesWithMp3Labels = [];
foreach ($uri['result'] as $a) {
if (strtolower($a["label"]) == "mp3") {
$nodesWithMp3Labels[] = $a;
}
}
答案 1 :(得分:1)
您应该使用array_filter
来获得带有MP3标签的所有结果:
$uri = json_decode(file_get_contents('https://example.com/json.json'), true);
$mp3 = array_filter($uri['result'], function($item) {
return $item['label'] === 'MP3';
})