is_array()
Функция is_array() в PHP проверяет, является ли переменная массивом, и возвращает true или false.
Что такое is_array()?
is_array() — это встроенная функция PHP, которая проверяет, является ли переданная переменная массивом. Она возвращает true, если переменная является массивом, и false для любого другого типа (string, integer, object, null и так далее).
PHP является динамически типизированным языком, поэтому переменная может содержать значение любого типа во время выполнения. Прежде чем перебирать значение в цикле, обращаться к нему по индексу или передавать его в функцию для работы с массивами, например count() или array_map(), нередко стоит убедиться, что вы действительно работаете с массивом. Вызов функции для работы с массивами на не-массиве может вызвать TypeError (PHP 8+) или предупреждение, поэтому быстрая проверка с помощью is_array() делает ваш код безопаснее.
Синтаксис
is_array(mixed $value): boolФункция принимает единственный параметр $value — переменную для проверки — и всегда возвращает boolean. Она никогда не генерирует собственных ошибок, поэтому её безопасно вызывать для любого значения, включая результаты функций, которые могут не быть заданы.
Базовый пример
Здесь $list является массивом, поэтому is_array() возвращает true; $text — строка, поэтому функция возвращает false. Мы используем var_dump() вместо echo, потому что echo true выводит 1, а echo false выводит пустую строку — из-за этого boolean-значения сложно читать. var_dump() явно отображает тип и значение.
Что считается массивом
Как индексированные, так и ассоциативные массивы возвращают true, и пустой массив тоже. Всё, что лишь выглядит как коллекция — например, объект или ArrayObject — не считается нативным массивом.
<?php
var_dump(is_array([])); // bool(true) — empty array
var_dump(is_array([1, 2, 3])); // bool(true) — indexed
var_dump(is_array(["name" => "Ann"])); // bool(true) — associative
var_dump(is_array([[1, 2], [3, 4]])); // bool(true) — multidimensional
var_dump(is_array("array")); // bool(false) — string
var_dump(is_array(42)); // bool(false) — integer
var_dump(is_array(null)); // bool(false) — null
var_dump(is_array(new stdClass())); // bool(false) — object
?>Практическое применение: защита перед итерацией
Распространённый паттерн — нормализовать входные данные, которые могут поступать как в виде одиночного значения, так и в виде списка, а затем безопасно перебирать их:
<?php
function printAll(mixed $input): void
{
// Wrap a single value in an array so the loop always works.
if (!is_array($input)) {
$input = [$input];
}
foreach ($input as $item) {
echo $item, "\n";
}
}
printAll("just one"); // just one
printAll(["a", "b", "c"]); // a / b / c on separate lines
?>Это позволяет избежать предупреждения foreach при скалярном значении $input и упрощает вызывающий код.
is_array() в сравнении с аналогичными проверками
is_array()vs.gettype():gettype()возвращает строку, например"array";is_array()напрямую возвращает boolean, что лучше читается в условииif.is_array()vs.is_iterable(): если вам нужно только знать, можно ли перебирать значение черезforeach,is_iterable()даёт более широкий охват — она принимает как массивы, так и объектыTraversable(например, генераторы).is_array()vs.is_countable(): используйтеis_countable()перед вызовомcount(), чтобы также принимать объекты, реализующие интерфейсCountable.- Для других проверок скалярных типов см.
is_string()иis_int().
Итоги
Используйте is_array(), когда вам нужна быстрая и безошибочная проверка того, что значение является настоящим массивом PHP — чаще всего как защита перед циклом или перед вызовом функции, работающей только с массивами. Если вам также нужно допускать итерируемые объекты, используйте is_iterable() или is_countable().