Необходимо получить определенные индексы из массива PHP

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 597
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

Ответ принят как подходящий

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

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

Спасибо, это решило мою проблему с одним небольшим исключением. Функция, которая дала мне 3 наибольших значения в качестве первых 3 чисел в новом массиве, должна быть arsort, а не asort

Vordreller 07.12.2008 22:44

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

Simon 07.12.2008 22:49

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

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

В коде PHP:

function threeLargest($array){
 krsort($array, "SORT_NUMERIC");
 $return[0] = $array[0];
 $return[1] = $array[1];
 $return[2] = $array[2];
 return $return;
}

это не сработало. По какой-то причине в моем отладчике не работают функции сортировки массивов ...

Vordreller 07.12.2008 22:29

Другие вопросы по теме