Nesnelerinin bir dizisini sıralamak php usort kullanıyorsunuz?

2 Cevap php

Ben usort bakmak, ama yine de biraz karıştı ki ...

Burada $ myObject nesne gibi görünüyor:

Array
(
    [0] => stdClass Object
        (
            [tid] => 13
            [vid] => 4
        )

    [1] => stdClass Object
        (
            [tid] => 10
            [vid] => 4
        )

    [2] => stdClass Object
        (
            [tid] => 34
            [vid] => 4
        )

    [3] => stdClass Object
        (
            [tid] => 9
            [vid] => 4
        )

Bunu gördüm:

function cmp( $a, $b )
{ 
  if(  $a->weight ==  $b->weight ){ return 0 ; } 
  return ($a->weight < $b->weight) ? -1 : 1;
} 
usort($myobject,'cmp');

Ben alman göre sıralamak için çalışıyorum, ama, ben ben sadece bir şey ağırlığını değiştirmek zorunda gerçekten emin değilim sanırım? Ya da sadece olduğu gibi çalışacak? Ben denedim, ama hiçbir şey outputted ...

2 Cevap

cmp usort bunları sıralamak için nasıl anlamaya (sizinki gibi) kompleks nesneleri karşılaştırmak için kullandığı bir callback fonksiyonudur. kullanımınız için cmp değiştirmek (veya istediğiniz ne olursa olsun yeniden adlandırın)

function cmp( $a, $b )
{ 
  if(  $a->tid ==  $b->tid ){ return 0 ; } 
  return ($a->tid < $b->tid) ? -1 : 1;
} 
usort($myobject,'cmp');

function sort_by_tid( $a, $b )
{ 
  if(  $a->tid ==  $b->tid ){ return 0 ; } 
  return ($a->tid < $b->tid) ? -1 : 1;
} 
usort($myobject,'sort_by_tid');

http://www.php.net/usort

Ben üç saat boyunca bir karşılaştırma işlevi yazmak için çalışıyorlar. Bu aslında çok kolaydır ama ben bir şey eksik olduğunu düşündüm ve benim örnek dizisi ile test birçok yönden algoritması değişen sıfırdan tekrar tekrar yazdı.

Sonunda ben sorunun iç uasort işlevi de olduğunu fark etti. Tüm öğeleri ile karşılaştırarak bitirmek değil. Şu anda kullanılan algoritmanın adını hatırlamıyorum ama kendimi C + + gelişmiş bir sürümünü (ooo benim) kullanın. Algoritma yeni indeksleri ile sıralama işlevi için bir özyinelemeli çağrı (alt, üst limitler) her zaman gerekli gibi birçok çiftleri içine dizi bölerek karşılaştırma yöntemi gibi bir ikili ağacı kullanır.

Kalan dilim bir öğe olduğunda, sonra üst ve alt endeksler aynıdır ve işlevi son öğe değerlendirilmemiş olmasına rağmen (tüm öğeleri ele) tamamladı düşünüyor. En-iç blok bir tek sayı olduğunda bu algoritma başarısız kullanarak sıralama işlevleri. Bu güzel 2, 4, 8 .... elemanları çalışır, ama 3, 5, 7 vb cant iş .. başarısızlık kesin durumu unsurları sıralama düzeni bağlıdır. Sayılar her zaman anlamlı olmayabilir.

Ben sorun yıl önce çözüldü. Ben bir PHP derleyici yok ve ben de PHP kaynak kodu yok çünkü ben artık PHP için kendime göre bunu çözmek olamaz. Ama PHP geliştirme ekibi Kişilerden Biri bana, ben C + + bu algoritmanın çalışma kopyasını temin edebilir. Aynı algoritma sıralı unsurları erişmenin en hızlı yoludur.