У меня есть 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'];