In array: примеры (PHP)
in_array(mixed $needle, array $haystack, bool $strict = false): boolОсновы функции in_array
Функция in_array осуществляет поиск значения в массиве. Она применяется, когда требуется определить наличие конкретного элемента в массиве без необходимости перебора всех элементов вручную.
Функция имеет следующую сигнатуру:
bool in_array(mixed $needle, array $haystack, bool $strict = false)
- $needle - искомое значение. Может быть любого типа.
- $haystack - массив, в котором выполняется поиск.
- $strict - необязательный параметр. Если установлен в true, функция проверяет также соответствие типов данных при сравнении. По умолчанию false.
Функция возвращает true, если элемент найден в массиве, и false в противном случае.
Простые примеры использования
$fruits = ['apple', 'banana', 'orange'];
$result = in_array('banana', $fruits);
var_dump($result);bool(true)
$numbers = [1, 2, 3];
$result = in_array('2', $numbers);
var_dump($result);bool(true)
$numbers = [1, 2, 3];
$result = in_array('2', $numbers, true);
var_dump($result);bool(false)
$user = ['id' => 1, 'name' => 'John'];
$result = in_array('John', $user);
var_dump($result);bool(true)
Похожие функции в PHP
Возвращает ключ найденного элемента вместо true/false. Полезно, когда требуется получить позицию элемента.
$fruits = ['apple', 'banana', 'orange'];
$key = array_search('banana', $fruits);
echo $key;1
Проверяет существование ключа в массиве. Работает быстрее для ассоциативных массивов, когда известен ключ.
$data = ['name' => 'John', 'age' => 30];
$exists = isset($data['name']);
var_dump($exists);bool(true)
Аналогична isset, но возвращает true даже для ключей со значением null.
in_array применяют для поиска значений, array_search - когда нужен ключ, isset/array_key_exists - для проверки существования ключей.
Типичные ошибки
$data = [0, 1, 2];
$result = in_array(false, $data);
var_dump($result);bool(true)
Решение - использовать строгий режим:
$result = in_array(false, $data, true);
var_dump($result);bool(false)
$users = [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane']
];
$result = in_array('John', $users);
var_dump($result);bool(false)
Для многомерных массивов нужна специальная обработка.
$result = in_array('test', 'string');
var_dump($result);Warning: in_array() expects parameter 2 to be array, string given
Изменения в новых версиях PHP
Внутренний параметр needle теперь имеет тип mixed. Улучшены сообщения об ошибках при неверных типах аргументов.
Добавлена поддержка строгой типизации. Улучшена производительность функции.
Добавлена возможность передавать массив в качестве параметра needle (работает рекурсивно).
$data = [[1, 2], [3, 4]];
$result = in_array([1, 2], $data);
var_dump($result);bool(true)
Расширенные примеры
class User {
public $id;
public function __construct($id) {
$this->id = $id;
}
}
$users = [new User(1), new User(2)];
$search = new User(1);
$result = in_array($search, $users, true);
var_dump($result);bool(false)
Объекты разные, поэтому strict сравнение дает false.
$data = ['001', '002', '003'];
$result = in_array(1, $data);
var_dump($result);bool(true)
Строка '001' преобразуется в число 1 при нестрогом сравнении.
function in_array_any($needles, $haystack, $strict = false) {
foreach ($needles as $needle) {
if (in_array($needle, $haystack, $strict)) {
return true;
}
}
return false;
}
$fruits = ['apple', 'banana', 'orange'];
$result = in_array_any(['grape', 'banana'], $fruits);
var_dump($result);bool(true)
$numbers = [10, 20, 30];
$search = 20;
$result = array_filter($numbers, fn($item) => $item === $search);
var_dump(!empty($result));bool(true)
// Генерация большого массива
$largeArray = range(1, 100000);
// Поиск в начале массива
$start = microtime(true);
in_array(500, $largeArray);
$time1 = microtime(true) - $start;
// Поиск в конце массива
$start = microtime(true);
in_array(99999, $largeArray);
$time2 = microtime(true) - $start;
echo "Поиск в начале: {$time1} сек
";
echo "Поиск в конце: {$time2} сек";Поиск в начале: 0.0001 сек
Поиск в конце: 0.0025 сек
Аналоги в других языках
In array в Python
Оператор in для списков и метод list.count()
fruits = ['apple', 'banana', 'orange']
result = 'banana' in fruits
print(result)True
In array в Javascript
Методы includes(), indexOf()
const fruits = ['apple', 'banana', 'orange'];
const result = fruits.includes('banana');
console.log(result);true
In array в MySQL
Оператор IN в условиях WHERE
SELECT * FROM products WHERE category_id IN (1, 3, 5);In array в Java
Метод Arrays.asList().contains()
String[] fruits = {'apple', 'banana', 'orange'};
boolean result = Arrays.asList(fruits).contains('banana');
System.out.println(result);true