Аналог JavaScript includes() в PHP

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

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *