В результате обработки ответа от vk api, получаю ассоциативный массив следующего вида:
$photo = [
"id" => 123456789,
"album_id" => -1,
"owner_id" => -123456789,
"user_id" => 123,
"photo_75" => "https://pp.userapi.com/c543108/v543108325/32081/LrpVe3GwjP0.jpg",
"photo_130" => "https://pp.userapi.com/c543108/v543108325/32082/NjQ-Gfsk1hg.jpg",
"photo_604" => "https://pp.userapi.com/c543108/v543108325/32083/U69oq8lmhO8.jpg",
"photo_807" => "https://pp.userapi.com/c543108/v543108325/32084/eJ-TYczImOI.jpg",
"photo_1280" => "https://pp.userapi.com/c543108/v543108325/32085/lX7pMrKFBsE.jpg",
"width" => 960,
"height" => 640,
"text" => "",
"date" => 1524633691,
"post_id" => 264727
];
Необходимо получить элемент с максимальным числом после "photo_", но загвоздка в том, что некоторых ключей может и не быть. Например, выше видно, что пришло только 5 размеров, но всего их 6 - есть ещё photo_2560. В зависимости от входящих параметров запроса ответ может быть разным. Могут придти все 6 размеров, могут только первые три(до photo_604 включительно) и т.п. Мне не важно сколько их придёт, нужно просто найти и получить максимальный размер.
Раньше я использовал довольно-таки некрасивую конструкцию с if-elseif-else, где проверял с помощью isset наличие ключа в массиве по убыванию(photo_2560 - photo_1280 - photo_807...) и если такой ключ находился, то уже дальше мог производить над ним необходимые мне манипуляции. Работало так, как нужно, но теперь мне не нравится такой вариант решения. Как лучше всего реализовать задуманное?
Ну если вам нужно другое решение, то более гибкий вариант таков:
$RESOLUTION = NULL;
// foreach ($photo as $key => $value) { - либо так, если хотите в цикле работать и со значениями
foreach(array_keys($photo) as $key) {
if ((substr($key, 0, 6) == 'photo_') AND ($RESOLUTION < substr($key, 6))) {
$RESOLUTION = substr($key, 6);
}
}
if (!is_null($RESOLUTION))
{
// Успешные действия
// $photo['photo_' . $RESOLUTION]
} else {
// Нет картинок, ошибка
}
P.S. Код подработаете под себя и возможно он не совсем оптимальный.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей