PHP çok boyutlu bir dizi sıralama?

3 Cevap php

Ben bu tür bir dizi var

array(5) {
  [0]=>
  array(5) {
    [0]=>
    string(7) "jannala"
    [1]=>
    string(10) "2009-11-16"
    [2]=>
    string(29) "
    		<p>Jotain mukavaa.</p>
    	"
    [3]=>
    int(12)
    [4]=>
    int(1270929600)
  }
  [1]=>
  array(5) {
    [0]=>
    string(7) "jannala"
    [1]=>
    string(10) "2009-11-16"
    [2]=>
    string(51) "
    		<p>Saapumiserä II/09 astuu palvelukseen</p>
    	"
    [3]=>
    int(11)
    [4]=>
    int(1270929600)
  }
  ...
}

Ne yapılması gerekir dizinin [x] [4] (unix zaman damgası değerine) dayalı diziyi sıralamak için. Bu nasıl elde ederim?

3 Cevap

Bir karşılaştırma işlevini kullanın, bu durumda dizinin unix timestamp değerini karşılaştırır:

function compare($x, $y) {
if ( $x[4] == $y[4] )
return 0;
else if ( $x[4] < $y[4] )
return -1;
else
return 1;
}

ve sonra bu gibi usort işlevini kullanarak onu çağırır:

usort($nameOfArray, 'compare');

Bu fonksiyon, bir kullanıcı tarafından sağlanan karşılaştırma işlevini kullanarak kendi değerleri ile bir dizi sıralamak olacaktır. Istediğiniz dizi sıralama olmayan bazı önemsiz kriterlere göre sıralanması gerekiyor eğer, bu işlevi kullanmalısınız.

PHP: usort kılavuzuna alınmıştır.

Sadece benim ilk düşünce: Bir nesnenin (sınıf örneği) içinde iç içe diziler her sarın, böylece bir kez belirli bir alanda (bu durumda, unix zaman damgası) olanlar, kolayca aynı kullanarak diğer bilgilere ulaşabilirsiniz nesne başvurusu.

Yani dizilerin iç içe dizisi bir "sıralama" yöntemi vardır, her biri nesneleri bir dizi haline gelebilir.

Yukarıda "karşılaştırmak" fonksiyonu ile mücadele, ancak this çalışma almak başardı:

function cmp($a, $b)
{
    if ($a['4'] == $b['4']) {
        return 0;
    }
    return ($a['4'] > $b['4']) ? -1 : 1;
}

usort($array, "cmp");

(Sıralama, artan değil, bu aynı zamanda bir azalan olduğunu unutmayın.)