2008-12-07 4 views
1

Я создал массив на PHP, который содержит bucnh временных меток unix.Нужно получить определенные индексы из массива PHP

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

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

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

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

ответ

7

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

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

+0

Спасибо, это решить мою проблему с одним небольшим исключением. Функция, которая дала мне 3 наибольших значения в качестве первых трех чисел в новом массиве, должна быть arsort, а не asort – Vordreller 2008-12-07 19:44:59

+0

А, рад, что это помогло. В качестве альтернативы вы могли бы использовать array_slice для срезания другого конца массива, но на самом деле это то же самое. – Simon 2008-12-07 19:49:17

1

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

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

0

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

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); 
-1

В PHP код:

function threeLargest($array){ 
krsort($array, "SORT_NUMERIC"); 
$return[0] = $array[0]; 
$return[1] = $array[1]; 
$return[2] = $array[2]; 
return $return; 
} 
Смежные вопросы