Софтуерно Инженерство
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 6883 Точки
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
petrovaliev95 avatar petrovaliev95 365 Точки

Пробвай така:

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

 

0
SvetlinYotov avatar SvetlinYotov 7 Точки

Пробвах го, но isset връща true или false , а при използването на този синтаксис ако ключа съществува, ще върне true, а ако го няма ще върне null.

0
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Това нали осъзнаваш, че ще assign-е резултата от isset(), ако съществува, а той е boolean.

P.S.: Лагна ми нета, и явно авторът вече го е пробвал :)

1
04/08/2015 23:36:44