Хранение массива отсортировано в PHP

Вам нужно оба репозитория , добавленные в yum, а не только 5.1/7 (в котором есть некоторые дополнительные пакеты, а не основной пакет confluent-community-2.11)

10
задан nickf 29 January 2009 в 06:20
поделиться

4 ответа

Не поддерживая массив в порядке, но как насчет этого вида оптимизации? Я предполагаю isset() поскольку ключ массива должен быть быстрее, чем in_array() поиск.

$allUsernames = array();
while($row = fgetcsv($fp)) {
  $username = $row[0];

  if (isset($allUsernames[$username])) {
    continue;
  } else {
    $allUsernames[$username] = true;

    // do stuff
  }
}
9
ответ дан 3 December 2019 в 23:15
поделиться

Способом создать массив с нуля в отсортированном порядке является вид вставки. В псевдокоде 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 в самой функции.

4
ответ дан 3 December 2019 в 23:15
поделиться

in_array () не извлекает выгоду из наличия сортированного массива. PHP просто идет по целому массиву, как будто это был связанный список.

0
ответ дан 3 December 2019 в 23:15
поделиться

Тип массива в php является заказанной картой (php тип массива). Если Вы передадите или в ints или в строках как ключи, то у Вас будет заказанная карта...

Рассмотрите объект № 6 в вышеупомянутой ссылке.

1
ответ дан 3 December 2019 в 23:15
поделиться