Что лучше использовать: in_array или array_unique?

Я сомневаюсь, что использовать:

foreach(){
    // .....

    if(!in_array($view, $this->_views[$condition]))
        array_push($this->_views[$condition], $view);

    // ....
}

ИЛИ

foreach(){
    // .....

    array_push($this->_views[$condition], $view);

    // ....
}

$this->_views[$condition] = array_unique($this->_views[$condition]);

UPDATE

Цель состоит в том, чтобы получить массив уникальных значений. Это можно сделать, проверяя каждый раз, если значение уже существует с in_array или каждый раз добавляет все значения и в конце использует array_unique. Итак, есть ли какое-то существенное различие между этими двумя способами?

Ответ 1

Я думаю, что второй подход будет более эффективным. Фактически, array_unique сортирует массив, затем сканирует его.

Сортировка выполняется в шагах N log N, затем сканирование занимает N шагов.

Первый подход принимает N ^ 2 шага (элемент foreach сканирует все N предыдущих элементов). На больших массивах существует очень большая разница.

Ответ 2

Честно говоря, если вы используете небольшой набор данных, неважно, какой из них вы используете. Если ваш набор данных находится в 10000-х годах, вы наверняка захотите использовать хэш-карту для такого рода вещей.

Это предполагает, что представления представляют собой строку или что-то еще, что похоже. Обычно это O (n) и, возможно, самый быстрый способ справиться с уникальными значениями отслеживания.

foreach($views as $view)
{
    if(!array_key_exists($view,$unique_views))
    {
        $unique_views[$condition][$view] = true;
    }
}