Что лучше использовать: в 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]);

обновление

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

2 ответов


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

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

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


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

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

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