Определение массива: методы и примеры

Раздел: Массивы в PHP -> Поиск и проверка в массивах

Проверка на массив в PHP

Наиболее эффективным и прямым способом проверки, является ли переменная массивом, служит встроенная функция is_array(). Она возвращает true, если переданная переменная представляет собой массив, и false в противном случае. Этот метод работает с любой версией PHP и не требует дополнительных расширений.

$data = ['apple', 'banana', 'cherry'];
if (is_array($data)) {
    echo 'Переменная является массивом.';
} else {
    echo 'Переменная не является массивом.';
}

Php проверка на массив (проверка, является ли переменная массивом в php)

Переменная является массивом.

Функция корректно обрабатывает как обычные массивы, так и ассоциативные, а также пустые массивы. Для объекта класса ArrayObject или другого итерируемого объекта is_array() вернёт false, поскольку это не массив, а объект.

Как проверить, является ли переменная массивом, используя gettype()?

Функция gettype() возвращает строку с названием типа переменной. Для массива - 'array'. Этот способ менее производителен, чем is_array(), но может быть полезен, когда требуется не только проверка на массив, но и определение других типов.

$value = [1, 2, 3];
$type = gettype($value);
if ($type === 'array') {
    echo 'Это массив.';
}
Это массив.

Проблема: gettype() возвращает строку, которую легко опечататься в сравнении. К тому же для неопределённой переменной gettype() вызовет ошибку уровня E_WARNING (до PHP 8.0) или выбросит TypeError (начиная с PHP 8.0). Рекомендуется сначала проверять существование переменной через isset().

Как проверить, является ли переменная массивом или итерируемым объектом?

Если нужно убедиться, что переменную можно перебирать в цикле foreach, используется функция is_iterable() (доступна с PHP 7.1). Она возвращает true как для массивов, так и для объектов, реализующих Traversable (например ArrayObject, Iterator).

$array = ['a' => 1, 'b' => 2];
$object = new ArrayObject($array);

echo is_iterable($array) ? 'Массив итерируем' : 'Нет';
echo "\n";
echo is_iterable($object) ? 'Объект итерируем' : 'Нет';
Массив итерируем
Объект итерируем

Ограничение: is_iterable() не различает массив и объект. Если требуется строгая проверка именно на массив, этот метод не подходит.

Как проверить, является ли массив индексированным (списком)?

Начиная с PHP 8.1 существует функция array_is_list(), которая определяет, является ли массив списком - то есть имеет последовательные целочисленные ключи от 0 до count($array)-1. Это дополнительная проверка после is_array().

$list   = ['zero', 'one', 'two'];
$assoc  = ['name' => 'John', 'age' => 30];

echo array_is_list($list) ? 'list - Да' : 'list - Нет';
echo "\n";
echo array_is_list($assoc) ? 'assoc - Да' : 'assoc - Нет';
list - Да
assoc - Нет

Совместимость: array_is_list() недоступна в версиях PHP ниже 8.1. Для старых версий можно написать собственную проверку:
function isList(array $arr): bool { $i = 0; foreach ($arr as $key => $value) { if ($key !== $i++) return false; } return true; }

Как избежать ошибки при проверке неопределённой переменной?

Перед вызовом is_array() или gettype() стоит убедиться, что переменная определена, с помощью isset() или оператора ?? (null coalescing).

// Без проверки может вызвать WARNING (или TypeError в PHP 8+)
$undefined = $maybeArray ?? [];
if (is_array($undefined)) {
    echo 'Массив (возможно пустой)';
}

// Или более строго:
if (isset($maybeArray) && is_array($maybeArray)) {
    echo 'Переменная существует и является массивом';
}
(вывод зависит от наличия переменной)

Расширенные примеры проверки на массив

Рекурсивная проверка элементов (массив массивов)

Иногда требуется убедиться, что все элементы переменной являются массивами. Это может понадобиться при работе с многомерными структурами.

Пример
function allAreArrays($data): bool {
    if (!is_array($data)) {
        return false;
    }
    foreach ($data as $item) {
        if (!is_array($item)) {
            return false;
        }
    }
    return true;
}

$valid   = [[1,2], [3,4], [5,6]];
$invalid = [[1,2], 'string', [5,6]];

echo allAreArrays($valid) ? 'Все массивы' : 'Есть не массив';
echo "\n";
echo allAreArrays($invalid) ? 'Все массивы' : 'Есть не массив';
Все массивы
Есть не массив

Проверка с приведением типа через (array)

Оператор приведения (array) преобразует скалярные значения в массив. Это не проверка, а способ гарантировать, что дальше используется массив. Однако после приведения можно применить is_array() - результат всегда будет true.

Пример
$value = 'text';
$array = (array) $value;
var_dump($array);
echo is_array($array) ? 'Стал массивом' : 'Ошибка';
array(1) {
  [0] =>
  string(4) "text"
}
Стал массивом

Использование array_walk для проверки массива

Функция array_walk() применяет callback к каждому элементу массива. Её можно применить только к массиву, поэтому предварительная проверка обязательна. Пример демонстрирует, как проверить, что все значения являются целыми числами.

Пример
$data = [10, 20, 30];
if (is_array($data)) {
    $allInt = true;
    array_walk($data, function($val) use (&$allInt) {
        if (!is_int($val)) {
            $allInt = false;
        }
    });
    echo $allInt ? 'Все целые' : 'Есть не целые';
} else {
    echo 'Не массив';
}
Все целые

Функция is_array с динамическими переменными

Переменная может быть получена из внешнего источника (JSON, POST, GET). Перед обработкой стоит проверять её тип.

Пример
$input = json_decode('[{"id":1},{"id":2}]', true);
if (is_array($input)) {
    foreach ($input as $item) {
        echo $item['id'] . ' ';
    }
} else {
    echo 'Ожидался массив JSON';
}
1 2

Проверка с помощью оператора match (PHP 8.0+)

Оператор match позволяет компактно обрабатывать разные типы, включая массивы.

Пример
$var = ['red', 'green'];
$result = match (true) {
    is_array($var) => 'Это массив',
    is_string($var) => 'Строка',
    default => 'Другой тип'
};
echo $result;
Это массив

Проверка на ассоциативный массив (самописная функция для старых PHP)

Если требуется отличить ассоциативный массив от индексированного, а array_is_list() недоступен, можно создать собственную реализацию.

Пример
function isAssoc(array $arr): bool {
    if (empty($arr)) {
        return false; // пустой массив - не ассоциативный
    }
    return array_keys($arr) !== range(0, count($arr) - 1);
}

$list  = [10, 20];
$assoc = ['a' => 1, 'b' => 2];

echo isAssoc($list) ? 'Ассоциативный' : 'Индексированный';
echo "\n";
echo isAssoc($assoc) ? 'Ассоциативный' : 'Индексированный';
Индексированный
Ассоциативный

проверка, является ли переменная массивом в PHP - comments

En
Php проверка на массив (php)