PHP
In_array в PHP: как проверить, есть ли значение в массиве
Короткий ответ: in_array() проверяет, есть ли значение в массиве. Например, in_array('admin', $roles, true) вернет true, если строка admin есть в массиве $roles. Третий аргумент true включает строгое сравнение
Эта функция полезна для проверки ролей, статусов, разрешенных значений формы, списка категорий, расширений файлов и любых простых списков
Простой пример
<?php
$roles = ['admin', 'editor', 'author'];
if (in_array('editor', $roles, true)) {
echo 'Роль найдена';
}
PHP проверит массив и выполнит if, потому что editor есть в списке
Проверка разрешенного статуса
<?php
$status = $_POST['status'] ?? '';
$allowedStatuses = ['draft', 'published', 'archived'];
if (!in_array($status, $allowedStatuses, true)) {
echo 'Недопустимый статус';
exit;
}
echo 'Статус можно сохранить';
Такой код защищает от ситуации, когда пользователь отправил в форме значение, которого не должно быть в системе
Зачем нужен третий аргумент true
Без строгого режима PHP может считать похожими значения разных типов
<?php
$values = [0, 1, 2];
var_dump(in_array('0', $values));
var_dump(in_array('0', $values, true));
Первый вызов может вернуть true, потому что PHP приводит типы. Второй проверяет строго: строка '0' и число 0 — разные значения
В прикладном коде лучше почти всегда использовать третий аргумент true
Проверка расширения файла
<?php
$filename = 'photo.jpg';
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$allowed = ['jpg', 'jpeg', 'png', 'webp'];
if (in_array($extension, $allowed, true)) {
echo 'Расширение разрешено';
} else {
echo 'Файл не подходит';
}
Это только часть проверки файла. Для загрузок на сайт нужно дополнительно проверять MIME-тип, размер, ошибки загрузки и хранить файл безопасно
in_array и ассоциативный массив
in_array() ищет по значениям, а не по ключам
<?php
$user = [
'name' => 'Динар',
'role' => 'admin',
];
var_dump(in_array('admin', $user, true));
Если нужно проверить ключ, используйте array_key_exists() или isset()
<?php
if (array_key_exists('role', $user)) {
echo 'Ключ role существует';
}
Мини-практика
Создайте массив разрешенных городов: Москва, Казань, Самара. Получите город из переменной $city и проверьте, можно ли оформить доставку. Затем включите строгий режим и объясните себе, почему это хорошая привычка
Частые ошибки
Не включают строгий режим Третий аргумент true защищает от неожиданных совпадений типов
Проверяют ключ через in_array in_array() ищет значение. Для ключа нужны array_key_exists() или isset()
Считают проверку расширения полной защитой Для загрузки файлов одного расширения недостаточно
Путают массив строк и строку Второй аргумент должен быть массивом, а не строкой
Как проверить себя
После примера с ролями добавьте в массив еще одну роль, например moderator, и проверьте ее через in_array(). Потом удалите третий аргумент true и сравните поведение на значениях 0, '0', false и null. Так проще почувствовать, почему строгая проверка важна не только в учебных примерах, но и в формах, правах доступа и фильтрах
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- PHP array: массивы, индексы, добавление и foreach
- PHP расширение: что это такое и как проверить модули PHP
- Timeweb: как изменить версию PHP на хостинге и проверить сайт
- Как выбрать версию PHP на FirstVDS и проверить сайт