Dizi sadece 5 öğelerini almak

5 Cevap php

benim dizi olarak izleyin kurulum:

array
  'testuri/abc' => 
    array
      'label' => string 'abc' (length=3)
      'weight' => float 5
  'testuri/abd' => 
    array
      'label' => string 'abd' (length=3)
      'weight' => float 2
  'testuri/dess' => 
    array
      'label' => string 'dess' (length=4)
      'weight' => float 2
  'testuri/gdm' => 
    array
      'label' => string 'gdm' (length=3)
      'weight' => float 2
  'testuri/abe' => 
    array
      'label' => string 'abe' (length=3)
      'weight' => float 2
  'testuri/esy' => 
    array
      'label' => string 'esy' (length=3)
      'weight' => float 2
  'testuri/rdx' => 
    array
      'label' => string 'rdx' (length=3)
      'weight' => float 3
  'testuri/tfc' => 
    array
      'label' => string 'tfc' (length=3)
      'weight' => float 3

Ben olsun / Bigges 'ağırlığı' ile 5 element filtrelemek istiyorum. Bu yapmak için bir php işlevi var mı?

PS. Benim fikrim foreach kullanımı idi

5 Cevap

Bildiğim kadarıyla yok.

Bunun için heap kullanabilirsiniz, ancak sadece 5 öğeleri için ben sadece en iyi 5 saklamak daha hızlı emin değilim.

Azalan ve daha sonra ilk beş değerlerini almak içinde ağırlık değeriyle dizi sıralayabilirsiniz:

function cmpByWeight($a, $b) {
    return $b['weight'] - $a['weight'];
}
uasort($array, 'cmpByWeight');
$firstFive = array_slice($array, 0, 5);

Sen iyi geçti değerlerin ağırlık 'endeksi karşılaştıran bir geri arama ile uasort kullanarak olurdu, ve sonra array_slice, hangi bağlı ilk 5 element (veya son 5 kapmak için şekilde sıralamak ...)

Ben array_multisort kullanın () ve ardından ilk 5 değerlerini kapmak olur.

($ ağırlık, SORT_DESC, $ etiket SORT_ASC, $ YOUR_ARRAY) array_multisort

Sonra sadece kapmak $ YOUR_ARRAY [0] - $ YOUR_ARRAY [4] veya ilk 5 kapmak için dizinin üzerinde yineleme

[EDIT] burada işlevine bir bağlantı -> http://us3.php.net/manual/en/function.array-multisort.php

Benim İngilizce iyi değil, ben ne gerek, anlatmaya çalışacağım. i dizi sıralayabilirsiniz .... ama yukarıdaki örnekte de şu var:

1x weight 5
2x weight 3
5x weight 2

Ben ilk 5 elemanları kapmak Yani eğer ..., ağırlığı 2 ile başka 3 göz ardı edilecektir. Yani ben ağırlığı 2 ile 5 elementler gerekir .... ve bu yüzden 7 maddeden oluşan bir dizi var.

Başka bir örnek:

2x weight 5
4x weight 2
7x weight 1

Ağırlık1 ile tüm unsurları göz ardı edilmelidir, Yani ben yeni bir diziye 6 öğeleri olsun ..