Разбираем, как заменить популярный метод 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()- Другие варианты? Пишите в комментарии!
Добавить комментарий