Необходимо получить конкретные индексы из массива PHP - PullRequest
1 голос
/ 07 декабря 2008

Я сделал массив в PHP, который содержит букву меток времени Unix.

Я пытаюсь создать функцию, которая будет возвращать массив, содержащий индексы 3 самых больших чисел в этом массиве.

Например, если самые большие числа находятся в индексах 3,5 и 8

И если наибольшее значение равно 5, второе по величине равно 8, а наименьшее из трех - число 3, я хочу массив, содержащий значения (5,8,3) в этом порядке.

И, честно говоря, я понятия не имею, как это осуществить. Кто-нибудь знает, как это сделать?

Ответы [ 4 ]

7 голосов
/ 07 декабря 2008

Вы можете использовать asort для сортировки массива и ведения индекса, а затем использовать slice вместе с 4-м параметром, снова для поддержания индекса, чтобы получить верхнее число элементов x вы после, и, наконец, использовать array_keys .

Возможно, есть более быстрый способ, но это просто для того, чтобы показать, что существует множество функций PHP-массивов, которые помогут вам достичь желаемого эффекта.

1 голос
/ 07 декабря 2008

Саймон опубликовал простой и, вероятно, достаточно хороший метод исполнения.

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

0 голосов
/ 07 декабря 2008

В коде PHP:

function threeLargest($array){
 krsort($array, "SORT_NUMERIC");
 $return[0] = $array[0];
 $return[1] = $array[1];
 $return[2] = $array[2];
 return $return;
}
0 голосов
/ 07 декабря 2008

В псевдокоде:

function select(list[1..n], k)
     for i from 1 to k
         maxIndex = i
         maxValue = list[i]
         for j from i+1 to n
             if list[j] > maxValue
                 maxIndex = j
                 maxValue = list[j]
         swap list[i] and list[maxIndex]
     return list[k]

newarray[] = select(array, 1);
newarray[] = select(array, 2);
newarray[] = select(array, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...