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. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x