PHP dizi dışında belirli dizinleri almak gerekir

4 Cevap php

Ben unix damgalarının bir bucnh tutan PHP bir dizi yaptı.

Ben o diziye büyük 3 sayı dizinleri içeren bir dizi döndürür bir işlev yapmaya çalışıyorum.

Örneğin, eğer en büyük sayı dizinler 3,5 ve 8 bulunmaktadır

Büyük 5 Ve, eğer ben bu sırayla değerleri (5,8,3) tutan bir dizi istiyorsanız, ikinci büyük 8 ve üç küçük sayısı 3'tür.

Ve açıkçası, ben bu koparmak için nasıl bir ipucu yok. Herkes bunu biliyor mu?

4 Cevap

Sen asort dizi sıralamak ve dizin korumak ve daha sonra sonra olan unsurların üst x sayısını grap için, dizin korumak için tekrar slice 4 parametresi ile birlikte kullanmak için kullanabilirsiniz ve son olarak kullanımı array_keys.

Orada da daha hızlı bir yolu olabilir, ama bu sadece sizin aradığınız etkiyi elde yardımcı PHP dizi fonksiyonları bol göstermek için var olabilir.

Simon basit ve muhtemelen yeterince iyi performans yöntemi yayınlanmıştır.

Diğer seçenek, sen gerçekten büyük bir dizi var yalnızca, dizi üzerinden tarama ve gördüğünüz üç yüksek değerlerin indeksleri takip etmektir. Bu O (n), ancak dizilerin tüm ama büyük muhtemelen yavaş, (kendi PHP kodu değil, derlenmiş bir yerleşik işlevi yorumlanır özellikle beri).

Pseudo-code:

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 kodu:

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