如何按顺序检索json数据

时间:2018-07-05 07:00:47

标签: php json

我有如下简单的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标签的位置总是在变化,有没有办法克服它?

2 个答案:

答案 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';
})