0

我有一个包含很多结果的 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);
         });

我得到了中等图像 URL,但是当我这样做时,echo $image我得到了循环中第一个结果的图像(按时间顺序)(所以 JSON 的底部)

我如何获得最新的(按时间顺序)而不是(JSON 顶部的第一个结果)?

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

4

1 回答 1

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'];
于 2013-06-05T20:19:23.757 回答