Вам нужно оба репозитория , добавленные в yum, а не только 5.1/7
(в котором есть некоторые дополнительные пакеты, а не основной пакет confluent-community-2.11
)
Не поддерживая массив в порядке, но как насчет этого вида оптимизации? Я предполагаю isset()
поскольку ключ массива должен быть быстрее, чем in_array()
поиск.
$allUsernames = array();
while($row = fgetcsv($fp)) {
$username = $row[0];
if (isset($allUsernames[$username])) {
continue;
} else {
$allUsernames[$username] = true;
// do stuff
}
}
Способом создать массив с нуля в отсортированном порядке является вид вставки. В псевдокоде PHP-выхода:
$list = []
for ($element in $elems_to_insert) {
$index = binary_search($element, $list);
insert_into_list($element, $list, $index);
}
Хотя, это могло бы на самом деле оказаться быстрее, чтобы просто создать массив в неотсортированном порядке и затем использовать quicksort (встроенные функции вида PHP используют quicksort),
И найти элемент в отсортированном списке:
function binary_search($list, $element) {
$start = 0;
$end = count($list);
while ($end - $start > 1) {
$mid = ($start + $end) / 2;
if ($list[$mid] < $element){
$start = $mid;
}
else{
$end = $mid;
}
}
return $end;
}
С этой реализацией необходимо было бы протестировать $list[$end]
чтобы видеть, является ли это элемент, Вы хотите, с тех пор, если элемент не находится в массиве, это найдет точку, где это должно быть вставлено. Я сделал это тот путь, таким образом, это будет согласовываться с предыдущим примером кода. Если Вы хотите, Вы могли бы проверить $list[$end] === $element
в самой функции.
in_array () не извлекает выгоду из наличия сортированного массива. PHP просто идет по целому массиву, как будто это был связанный список.
Тип массива в php является заказанной картой (php тип массива). Если Вы передадите или в ints или в строках как ключи, то у Вас будет заказанная карта...
Рассмотрите объект № 6 в вышеупомянутой ссылке.