Софтуерно Инженерство
Loading...
SvetlinYotov avatar SvetlinYotov 7 Точки

Проверка за ключ в масив - PHP

Привет :)

Имам масив, който се пази в $arr_data. В него искам да проверя дали съществува конкретен ключ и ако не да се върне Null  като искам това да стане с възможно най-малко код.

Сещам се за използването на тернарен оператор:

$token = array_key_exists('refresh', $arr_data) ? $arr_data['refresh'] : null;

Горното работи супер, но възможно ли е да сработи още по-краткия запис:

$token = $arr_data['refresh'] ?: null;

Ако индекса го няма горният пример връща грешка "Undefined index: refresh" , което е разбираемо, но няма ли начин да се подкара някак втория вариант?

Тагове:
1
PHP Web Development Basics
SvetlinYotov:
Получих решение на проблема. Благодаря!
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки
Best Answer

Ползването на асоциативни масиви е error prone са от страна на ключове, може да объркаш името на ключа без да получиш hint за това докато пишеш, а и, естествено, има такива завъртяни неща, като това до което ти си стигнал.

Ако използваш структурата от данни като документ/обект, значи не би трябвало да имаш липсващи ключове. Ако я ползваш като хаштаблица, значи е време да си направиш лека абстракция над съответната структура. Имай предвид, че всъщност асоциативните масиви имплементират ordered map.

Ако на прекалено много места в кода си имаш подобно търсене, можеш да си направиш функция за това:

function get_value(array $array, $key) {

    return isset($array([$key]) ? $array[$key] : null;

}

и после get_value($arr_data, 'refresh');

Евентуално ако тази структура $arr_data е член на някакъв обект, можеш да имплементираш подобен метод за търсене в самия клас.

P.S.: В заключение, нещо което не одобрявам, но все пак, грешката която ти вади при второто ти решение е просто warning, който при изключени грешки не би бил проблем. Ще сложи null в променливата, когато го няма ключът, и ще сложи стойността, когато го има.

2
SvetlinYotov avatar SvetlinYotov 7 Точки

В моя случай трябваше да проверя дали пристига refresh token при логин с Google Plus API. Също така след като от API-то получа отговор е възможно някои от очакваните параметри да липсват. За това ми трябва подобна проверка.

Благодаря за бързия отговор :)

0