JSON,得到第一个结果而不是最后一个结果

时间:2013-06-05 20:16:57

标签: php arrays json

我有一个包含很多结果的JSON,其中包含各种“对象”,这也与图像有关。

"image":[
           {
              "#text":"http:\/\/BLAHBLAH",
              "size":"small"
           },
           {
              "#text":"http:\/\/BLAHBLAH",
              "size":"medium"
           },
           {
              "#text":"http:\/\/BLAHBLAH",
              "size":"large"
           }
        ]

使用

$image = array_reduce($track['image'], function ($image, array $i) {
                 return $image ?: ($i['size'] == 'medium' ? $i['#text'] : null);
         });

我得到了媒体图片网址,但是当我echo $image时,我在循环中获得了第一个结果(按时间顺序排列)的图像(所以JSON的底部)

如何获取最新的(按时间顺序排列)(第一个结果位于JSON顶部)?

修改 Here是整个代码。 这是链接(您可以在右下角看到相关部分)。

1 个答案:

答案 0 :(得分:2)

根据我的理解,你是第一个有尺寸==中等的

这是一个能为您提供的功能。

 function getTextForSize($array, $size = "medium") {
      foreach($array as $v){
         if ($v["size"] == $size){
              return $v["#text"];
         }
      }
 }

只用说

 $text = getTextForSize($track["image"], "medium");
如果你想要一个不同大小的图像,

改变第二个参数。

如果您已与数组reduce方法结合,请尝试此操作

$image = array_reduce($track['image'], function ($image, array $i) {
             return $image.((!$image) && $i['size'] == 'medium' ? $i['#text'] : null);
        }     
);

如果你只是在第一个元素之后就可以做到这一点。

 $track['image'][0]

如果你想要你想说的文字

 $track['image'][0]['#text'];

对于大小,它将是

 $track['image'][0]['size'];