Проверка принадлежности переменной к массиву
Основные методы проверки переменной на массив
Как проверить, что переменная является массивом без учёта объектов?
Наиболее надёжный и быстрый способ - функция is_array(). Она возвращает true только для переменных типа array, игнорируя объекты, даже реализующие интерфейс ArrayAccess или Traversable.
$var = [1, 2, 3];
if (is_array($var)) {
echo 'Это массив';
} else {
echo 'Не массив';
}Php ключи массива (получение ключей массива в php)
Это массив
Php массивы индексы (получение индексов массива в php)
Типичная ошибка: путать is_array() с is_countable() или is_iterable(). Если требуется строгая проверка именно на массив (а не на итерируемый объект), используйте только is_array().
Проблема: is_array() возвращает false для объекта ArrayObject, хотя его можно использовать как массив. Решение: дополнительно проверить тип через instanceof ArrayObject или использовать is_countable() с дополнительными условиями.
Как определить тип переменной и сравнить строку 'array'?
Функция gettype() возвращает строковое представление типа. Сравнение с 'array' даёт тот же результат, что и is_array(), но менее производительно и менее читаемо.
$var = ['a' => 1];
if (gettype($var) === 'array') {
echo 'Это массив';
}
массив данных php (работа с массивом данных в php)
Это массив
массив ли php (проверка, является ли переменная массивом в php)
Ошибка: использование gettype() с нестрогим сравнением (==) может привести к ложным срабатываниям, если тип не совпадает точно. Всегда используйте ===.
Как проверить, поддерживает ли переменная подсчёт элементов, включая массивы?
Функция is_countable() (PHP 7.3+) возвращает true для массивов и объектов, реализующих Countable. Если нужно только массивы, комбинируют с is_array().
$var = ['x', 'y'];
if (is_countable($var) && is_array($var)) {
echo 'Это массив и он поддаётся подсчёту';
}Php разбить массив (разбиение массива на части в php)
Это массив и он поддаётся подсчёту
Php переменные массив (создание массива из переменных в php)
Ловушка: is_countable() вернёт true для объекта класса, реализующего Countable, что может быть не ожидаемо, если ожидается строго массив.
Как проверить, что переменная является массивом или итерируемым объектом?
Функция is_iterable() (PHP 7.1+) возвращает true для массивов и объектов, реализующих Traversable. Полезна при написании универсальных функций, работающих с foreach.
$var = new ArrayObject([1, 2]);
if (is_iterable($var)) {
echo 'Переменная пригодна для перебора';
}Php сортировка массива (сортировка массива в php)
Переменная пригодна для перебора
ассоциативный массив php (ассоциативные массивы в php)
Особенность: is_iterable() не отличает массивы от объектов. Если нужна строгая проверка на массив, используйте is_array().
Как использовать проверку через оператор instanceof для интерфейсов?
Оператор instanceof не применим к массивам (массив не является объектом). Однако можно проверить, является ли переменная объектом, реализующим Traversable или ArrayAccess, и затем отдельно обработать массивы.
$var = [1, 2];
if (is_array($var) || $var instanceof Traversable) {
echo 'Данные можно перебрать';
}Php удалить массива (удаление всего массива в php)
Данные можно перебрать
функции массива php (функции для работы с массивами в php)
Ошибка попытка применить instanceof к массиву напрямую ($var instanceof array) приведёт к фатальной ошибке, так как array - не класс.
Как проверить тип аргумента функции на массив с помощью type hinting?
Объявление параметра с типом array принудительно проверяет, что переданное значение является массивом. При несовпадении выбрасывается TypeError.
function processArray(array $data) {
echo 'Получен массив из ' . count($data) . ' элементов';
}
processArray(['a', 'b']);
// processArray('строка'); // TypeError
Этот способ подходит для строгой типизации в объявлениях функций, но не для произвольной проверки в коде.
Ограничение: type hinting работает только в момент вызова функции; его нельзя применить для проверки переменной, не переданной в функцию.
Расширенные примеры проверки массива в PHP
Пример 1. Проверка в цикле с обработкой элементов:
$data = [
'users' => ['Alice', 'Bob'],
'config' => ['debug' => true],
'string' => 'hello',
'number' => 42
];
foreach ($data as $key => $value) {
if (is_array($value)) {
echo "Ключ '$key' содержит массив с " . count($value) . " элем.
";
} else {
echo "Ключ '$key' не массив.
";
}
}
Ключ 'users' содержит массив с 2 элем. Ключ 'config' содержит массив с 1 элем. Ключ 'string' не массив. Ключ 'number' не массив.
Пример 2. Рекурсивная проверка многомерного массива:
$nested = [
'level1' => [
'level2' => [
'value' => 100
]
]
];
function isAllArrays(array $arr): bool {
foreach ($arr as $item) {
if (is_array($item) && !isAllArrays($item)) {
return false;
}
}
return true;
}
echo isAllArrays($nested) ? 'Все элементы - массивы' : 'Найден не массив';
Все элементы - массивы
Пример 3. Использование is_array с array_filter для удаления не массивов:
$mixed = [
[1, 2],
'text',
['a' => 'b'],
null,
[0 => 'zero']
];
$onlyArrays = array_filter($mixed, 'is_array');
print_r($onlyArrays);
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[2] => Array
(
[a] => b
)
[4] => Array
(
[0] => zero
)
)
Пример 4. Комбинация is_array и array_map для безопасной обработки:
$input = [
['apple', 'banana'],
'invalid',
['grape']
];
$result = array_map(function($item) {
return is_array($item) ? implode(', ', $item) : $item;
}, $input);
print_r($result);
Array
(
[0] => apple, banana
[1] => invalid
[2] => grape
)
Пример 5. Проверка пустого массива:
$emptyArr = [];
if (is_array($emptyArr) && count($emptyArr) === 0) {
echo 'Пустой массив';
} else {
echo 'Не пустой массив или не массив';
}
Пустой массив
Пример 6. Проверка переменной, полученной из внешнего источника (например, JSON):
$json = '[{"id":1}, {"id":2}]';
$decoded = json_decode($json, true);
if (is_array($decoded)) {
echo 'JSON декодирован в массив, элементов: ' . count($decoded);
} else {
echo 'Ошибка: JSON не является массивом';
}
JSON декодирован в массив, элементов: 2
Пример 7. Использование try/catch с type hinting:
function expectArray(array $arr) { }
try {
expectArray('string');
} catch (TypeError $e) {
echo 'Ошибка: ' . $e->getMessage();
}
Ошибка: expectArray(): Argument #1 ($arr) must be of type array, string given, called in ...