Попытка завершить цикл с 10 самых низких значений из более - PullRequest
0 голосов
/ 10 июля 2011

У меня уже есть код, который просматривает каждый член моего веб-сайта и может извлечь определенную переменную (в данном случае это $ duration).

Я пытаюсь найти людей с 10 самыми низкими длительностями , поместить их в упорядоченный массив или список, а затем перебрать 10 и echo из него.

В качестве примера использования давайте представим, что из 100 участников 10 человек имеют длительность 10, 20, 30, 40 и т. Д., А мы притворимся, что остальные 90 участников имеют длительности где-то между 101-1000.

Когда я перебираю каждый элемент, я хочу увидеть, является ли значение этого элемента duration ниже, чем любое из 10, которые у меня уже есть в каком-либо контейнере (массиве?), И в конце смог echo из 10 от низшего к высшему.

Ответы [ 3 ]

1 голос
/ 10 июля 2011

См. Этот пример в кодовой панели: http://codepad.org/4ROaojCT

<?php

$array = array(5, 6, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13);

sort($array);
$array = array_slice($array, 0, 10);

print_r($array);

Результат:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
)
0 голосов
/ 10 июля 2011

Храните все элементы вашего веб-сайта в хэше, ключом является длительность, а значением - первичный ключ или даже объект, содержащий сведения об элементе.Напишите функцию, которая может быть передана в uksort , которая будет сортировать хеш по ключам.разверните и напечатайте верхнюю часть 10.

0 голосов
/ 10 июля 2011

Поскольку вы все равно должны проходить через каждое значение, просто добавьте все значения в массив, а затем используйте метод sort и возьмите первые десять элементов (0-9). Вот документация о том, как именно использовать этот метод:

http://www.php.net/manual/en/function.sort.php

Преимущество этого решения состоит в том, что оно будет переупорядочивать значения так, чтобы ключ 0 соответствовал наименьшему значению. Также есть возможность изменить тип сравнения (текстовый, числовой и т. Д.)

Вы можете пытаться сортировать каждый раз, когда найдете новое значение (вставьте новое значение и отбросьте самое высокое значение). Это сэкономит вам память для массива, но это будет стоить вам вычислительной мощности при сравнении каждого значения. Даже с оптимизацией это, вероятно, не будет достаточно хорошо.

Если вы действительно не хотите помещать каждый элемент в массив, вы можете создать массив из 50 членов (или любого магического числа, которое вы хотите использовать). Вы могли бы заполнить это с первыми 50 длительностями и затем отсортировать это. Затем вы можете добавить еще 40 элементов в позиции массива 10-49 и снова отсортировать их. Вы можете повторять это снова и снова, сохраняя ваши самые низкие десять пунктов каждый раз, когда вы добавляете новые длительности. Таким образом, вы можете уравновесить снижение производительности при сортировке каждого элемента и потерю памяти при хранении каждого элемента. Вы можете набрать его, изменив размер массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...