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 Trainer 6849 Точки
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 358 Точки

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

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

 

0
SvetlinYotov avatar SvetlinYotov 7 Точки

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

0
RoYaL avatar RoYaL Trainer 6849 Точки

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

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

1
04/08/2015 23:36:44
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.