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