Поиск и выборка элемента с максимальным ключом в массиве

216
26 апреля 2018, 09:06

В результате обработки ответа от 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...) и если такой ключ находился, то уже дальше мог производить над ним необходимые мне манипуляции. Работало так, как нужно, но теперь мне не нравится такой вариант решения. Как лучше всего реализовать задуманное?

Answer 1

Ну если вам нужно другое решение, то более гибкий вариант таков:

$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. Код подработаете под себя и возможно он не совсем оптимальный.

READ ALSO
Запретить изменение HTML структуры CKEditor

Запретить изменение HTML структуры CKEditor

Зачастую редакторы статей могут испортить структуру статьи: убрать заголовок, или изменить жирность шрифта и так далееПоявилось желание...

237
Узнать причину 500 ошибки

Узнать причину 500 ошибки

У меня есть серверНа нем размещен сайт

208
Загрузка страницы

Загрузка страницы

При формировании данных на странице, до окончательной ее загрузке необходимо отобразить соответствующее сообщение, при окончании загрузки...

170
Получить blob ячейку из БД wordpress

Получить blob ячейку из БД wordpress

Каким способом в wordpress получить из БД ячейку BLOB? При помощи кода ниже удаётся только получить INT ячейкиКогда запрос идёт на BLOB ячейку, то возвращается...

160