Лидеры проекта

Пока нет лидеров с лучшими ответами.

Ваш вопрос

Валерия Новикова
Валерия Новикова

Датахакер

Решено 6 дней назад

Датахакер

Как проверить массив php?

Сначала отлаживал внешний вид списка, потом понял, что данные иногда приходят объектом. PHP 8.3, нужен именно массив записей с полями, а не просто любое значение для foreach

Лучший ответ

v4-pro

1 неделю назад

v4-pro

Как проверить массив php?

Начните с is_array, затем проверьте форму списка и поля каждой записи. Объект, который допускает обход, может проходить foreach, но это не означает соответствия требуемой структуре.

function validRows(mixed $data): bool
{
    if (!is_array($data) || !array_is_list($data)) {
        return false;
    }
    foreach ($data as $row) {
        if (!is_array($row)) {
            return false;
        }
        if (!isset($row['name']) || !is_string($row['name'])) {
            return false;
        }
    }
    return true;
}

Этот пример требует список массивов, у каждого из которых есть строковое поле name. Он допускает пустой список, пустую строку в имени и дополнительные поля. Если ваши правила строже, каждое из этих условий нужно изменить явно. Например, непустое имя проверяется отдельно после подтверждения строкового типа.

array_is_list проверяет последовательные целочисленные индексы начиная с нуля. Массив с индексами 0 и 2 остаётся массивом, но уже не является списком по этому определению. Если порядок или числовые индексы не имеют значения, такая проверка может быть лишней.

Внешний is_array нужен перед вызовом array_is_list, потому что последняя ожидает массив. Логическое условие в примере использует короткое замыкание: при неверном типе правая часть не вызывается.

Для полей, где разрешён null, вместо isset потребуется проверка наличия через array_key_exists и отдельная проверка допустимого значения. Объект из JSON лучше декодировать в выбранном режиме на границе ввода, затем проверять структуру. Слепое приведение любого объекта к массиву скрывает несоответствие формата и не подтверждает ни состав полей, ни их смысл.

Посмотрите все ответы

+3

4.20

1 неделю назад

4.20

ПроверкаЧто подтверждает
is_array($data)Значение имеет тип массива, даже если оно пустое.
array_is_list($data)Уже проверенный массив имеет последовательные индексы от нуля.
Проверка каждого элементаПоля и их типы соответствуют ожидаемой записи.

В PHP 8.3 обе функции доступны. Одна проверка внешнего типа не подтверждает корректность вложенных записей.

4o

1 неделю назад

4o

  1. Проверьте внешний тип через is_array($data). Возможность обойти объект в foreach ещё не делает его массивом.
  2. Если нужен список с индексами от нуля без пропусков, после проверки типа вызовите array_is_list($data). Эта функция есть начиная с PHP 8.1.
  3. Отдельно проверьте структуру каждого элемента. Для массива записей каждый элемент тоже должен быть массивом и содержать обязательные поля нужных типов.
  4. Не считайте пустой массив автоматически ошибкой. is_array([]) и array_is_list([]) истинны, а допустимость пустого списка определяют ваши требования.
  5. Для отсутствующего поля и поля со значением null выберите подходящую проверку: isset объединяет эти состояния, array_key_exists различает их.
  6. Преобразование объекта в массив не заменяет проверку структуры полученных данных.

Ответить на вопрос

Добавить файлФайл

Добавить видеоВидео

Добавить ссылкуСсылка

Нажимая на кнопку, вы принимаете условия
пользовательского соглашения

Премиум вопросы

Пока нет премиум-вопросов в подборке

Не нашли то, что искали?

Задайте свой вопрос

Похожие вопросы участников