Проверка наличия элемента в массиве

Задача
Необходимо узнать, содержит ли массив определенное значение.

Решение
Используйте функцию in_array():
if (in_array($array, $value)) {
// в массиве $array есть элемент со значением $value
}
Обсуждение
Используйте функцию in_array(), чтобы проверить, содержит ли элемент массива значение:

$book_collection = array('Emma', 'Pride and Prejudice', 'Northhanger Abbey');
$book = 'Sense and Sensibility';
if (in_array($book_collection, $book)) {
echo 'Own it.';
} else {
echo 'Need it.';
}

По умолчанию функция in_array() сравнивает данные при помощи оператора ==. Чтобы провести проверку с оператором строгого равенства ===, передайте функции in_array() значение true в качестве третьего параметра:

$array = array(1, '2', 'three');
in_array(0, $array); // true!
in_array(0, $array, true); // false
in_array(1, $array); // true
in_array(1, $array, true); // true
in_array(2, $array); // true
in_array(2, $array, true); // false

В первой проверке функция in_array(0, $array) возвращает true, поскольку для сравнения числа 0 со строкой three PHP приводит строку three к целому значению.


А так как строка three не является числовой строкой, такой как 2, она превращается в 0. Поэтому функция in_array() считает, что значения совпадают.

Следовательно, при сравнении чисел с данными, которые могут содержать строки,безопаснее использовать строгое сравнение.

Если функция in_array() много раз применяется к тому же самому массиву, возможно лучше использовать ассоциативный массив, в котором ключами являются элементы исходного массива. При использовании функции in_array() время поиска меняется по линейному закону,
а в случае ассоциативного массива поиск занимает одинаковое время.

Если нельзя создать ассоциативный массив непосредственно, а требуется получить его, конвертируя обычный массив с целочисленными ключами, используйте для замены ключей и значений массива функцию array_flip():

$book_collection = array('Emma',
'Pride and Prejudice',
'Northhanger Abbey');
// преобразование из числового массива в ассоциативный
$book_collection = array_flip($book_collection);
$book = 'Sense and Sensibility';if (isset($book_collection[$book])) {
echo 'Own it.';
} else {
echo 'Need it.';
}

Обратите внимание, что в процессе получения преобразованного массива множество ключей с одинаковым значением сжимаются в один элемент.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Добавление одного массива к другому
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива

Вернуться в раздел: PHP / 4. Массивы