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); }); 

Я получаю URL-адрес среднего изображения, хотя, когда я делаю echo $image я получаю изображение первого результата (в хронологическом порядке) в цикле (так внизу JSON)

Как мне получить последнее (хронологически) вместо этого (первый результат в верхней части JSON)?

EDIT: Вот весь код. Вот ссылка (вы можете увидеть соответствующую часть внизу справа).

Из того, что я понимаю, вы после первого с размером == medium

Вот функция, которая получит ее для вас.

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

просто сказать

  $text = getTextForSize($track["image"], "medium"); 

измените второй аргумент, если хотите изображение другого размера.

Если вы состоите в браке с методом уменьшения массива, попробуйте это

 $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'];