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