In array: примеры (PHP)

Использование 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
isset

Проверяет существование ключа в массиве. Работает быстрее для ассоциативных массивов, когда известен ключ.

$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 - для проверки существования ключей.

Типичные ошибки

Поиск false, 0 или null
$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

PHP 8.0

Внутренний параметр needle теперь имеет тип mixed. Улучшены сообщения об ошибках при неверных типах аргументов.

PHP 7.4

Добавлена поддержка строгой типизации. Улучшена производительность функции.

PHP 5.4

Добавлена возможность передавать массив в качестве параметра needle (работает рекурсивно).

$data = [[1, 2], [3, 4]];
$result = in_array([1, 2], $data);
var_dump($result);
bool(true)

Расширенные примеры

Поиск в массиве объектов
Пример php
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.

Поиск с преобразованием типа
Пример php
$data = ['001', '002', '003'];
$result = in_array(1, $data);
var_dump($result);
bool(true)

Строка '001' преобразуется в число 1 при нестрогом сравнении.

Поиск нескольких значений
Пример php
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)
Поиск с callback-функцией
Пример php
$numbers = [10, 20, 30];
$search = 20;
$result = array_filter($numbers, fn($item) => $item === $search);
var_dump(!empty($result));
bool(true)
Производительность больших массивов
Пример php
// Генерация большого массива
$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

PHP in_array function comments

En
In array Checks if a value exists in an array