Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

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

Решение

Используйте функцию 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.';
}

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

См. также

Как определять положение элемента в массиве, смотрите документацию по функции in_array() на странице http://www.php.net/in-array и по функции array_flip() на странице http://www.php.net/array-flip

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ