Задать вопрос
PageUp
@PageUp
Default

Как устранить Undefined array key после назначения переменных через explode()?

Всем привет!

Хочу перевести скрипты с php 5.2 на 8 но столкнулся с постоянными ошибками о неназначенных переменных. И если большинство сразу налету можно вписать в условие isset(), перед назначением, когда она назначается в цикле for например.
Ну или когда передается методом POST, GET или штучно назначается.

Но как быть с explode? У меня их очень много и переделывать их все на циклы нет возможности.

Вот такой вот код выдает ошибку в заголовке этой темы:

$pr_ip = explode(".", $ip_addr);
$my_ip = $pr_ip[0].$pr_ip[1].$pr_ip[2];


Как быть? Как менее болезненно устранить все эти Undefined array key в коде, везде, где есть explode()

Это ладно когда еще небольшая входящая может быть. Но у меня есть проверки файлов в которых допустим 60 ячеек с которых берутся данные. Где-то ячейки пустые, где-то с данными. Не писать же для каждой отдельно проверку.
  • Вопрос задан
  • 4943 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
На "западном аналогичном этому сайте" только что случайно наткнулся на красивое решение.
$arrdata = array_pad(explode('|', $file[0]), 666, '');

где 666 - это количество колонок, которое должно быть после explode.
array_pad добьёт их пустыми строками. можно поставить нули при желании.
Ответ написан
toxa82
@toxa82
Писать, обрабатывать все варианты входящих данных. Можешь конечно засобачить, но это говнокод. Даже 5.2 матерился на это нотайсами, сейчас, если не ошибаюсь, это переделали в 8 на варнинги.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MIX2MAX
а чем не угодило типовое решение
set_error_handler(function(int $errno, string $errstr) {
    if ((strpos($errstr, 'Undefined array key') === false) && (strpos($errstr, 'Undefined variable') === false)) {
        return false;
    } else {
        return true;
    }
}, E_WARNING);
Ответ написан
PageUp
@PageUp Автор вопроса
Default
Кому нужно будет решение, то вот. Нашел на западном аналогичном этому сайте. Работает как надо. Все ошибки касательно explode и не назначенных переменных пропали.

$data=explode("|", $file[0] ?? '');
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы