Разбираем, как заменить популярный метод JavaScript includes()
в PHP с примерами кода и подводными камнями.
📌 JavaScript: includes()
В JavaScript метод проверяет наличие подстроки или элемента в массиве:
// Строки
"Hello".includes("ell"); // true
// Массивы
[1, 2, 3].includes(2); // true
📌 PHP: аналоги
1. Для строк
str_contains()
(PHP 8.0+) — самый простой вариант:
str_contains("Hello", "ell"); // true
strpos()
(для PHP < 8.0) — требует точной проверки:
if (strpos("Hello", "ell") !== false) { // true
echo "Найдено!";
}
🔹 Подводный камень:strpos()
возвращает 0
, если подстрока в начале строки, поэтому проверка должна быть строго !== false
:
strpos("Hello", "He"); // 0 (но это не false!)
2. Для массивов
in_array()
— аналог [].includes()
:
in_array(2, [1, 2, 3]); // true
array_key_exists()
— проверка ключа:
array_key_exists("key", ["key" => 42]); // true
🔹 Подводный камень:in_array()
по умолчанию использует нестрогую проверку (==
). Для строгой (===
) укажите третий параметр:
in_array("2", [1, 2, 3]); // true (без strict)
in_array("2", [1, 2, 3], true); // false (со strict)
3. Регистронезависимый поиск
Для строк используйте stripos()
:
stripos("Hello", "hello"); // 0 (проверяйте !== false!)
Для массивов — преобразуйте элементы в нижний регистр:
in_array(strtolower("HELLO"), array_map('strtolower', $array));
📌 Советы по оптимизации
- Для строк:
str_contains()
(PHP 8+) быстрее и читабельнее. - Для массивов:
isset($array[$key])
работает быстрееin_array()
, но проверяет только ключи. - Большие массивы: Используйте связку
array_flip() + isset()
:
isset(array_flip($array)[$value]);
📌 Вопрос читателям
Какой метод вы используете чаще?
str_contains()
/strpos()
in_array()
/isset()
- Другие варианты? Пишите в комментарии!