@accountnujen

Каким образом можно присвоить элементу массива false, если для него нет значения?

У меня есть сложная регулярка, которая разбивает строку на: Имя, Фамилия, Отчество, День рождения, Телефон и Почта. Некоторые значения могут быть необязательными. Эти данные мне нужно разобрать по массиву и отправить в сторонний сервис. Раньше это выглядело вот так:

$result = ["api" => $api_key, "data" => ["lastname" => $req[1], "firstname" => $req[2], "secondname" => $req[3], "birthdate" => $req[4], "phone" => $req[5], "email" => $req[6]]];

В случае, если каких-то данных не было, то туда записывалось null. То есть $req[5] вполне мог быть null, а в $req[6] были бы данные.
Внезапно, сервис, куда я слал данные, сделал валидацию полей и теперь он стал ругаться на null, мол не соответствует поле правилам. Однако, если просто не отправить ключ почты (к примеру), то система запрос принимала и обрабатывала.
Я быстро сделал вот такой костыль:

($req[1]) ? $res['params']['lastname'] = $req[1] : false;
($req[2]) ? $res['params']['firstname'] = $req[2] : false;
($req[3]) ? $res['params']['secondname'] = $req[3] : false;
($req[4]) ? $res['params']['birthdate'] = $req[4] : false;
($req[5]) ? $res['params']['phone'] = $req[5] : false;
($req[6]) ? $res['params']['email'] = $req[6] : false;

Он свою функцию выполняет, но мне кажется, что можно сделать лучше.
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
@entermix
if ($req[1]) $res['params']['lastname'] = $req[1]
if ($req[2]) $res['params']['firstname'] = $req[2]
if ($req[3]) $res['params']['secondname'] = $req[3]
if ($req[4]) $res['params']['birthdate'] = $req[4]
if ($req[5]) $res['params']['phone'] = $req[5]
if ($req[6]) $res['params']['email'] = $req[6]


spoiler
Кажется вам достаточно отфильтровать массив $res['params'], прежде чем отправлять на сторонний сервис:

$res['params'] = array_filter($res['params'], function($v) { return !is_null($v); });
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽