iki kritere göre sıralama bir nesne php?

1 Cevap php

Bu (1) derinliğine göre nesneler dizisi ve (2) kilo sıralamak için çalışıyor, ve ben bu diğer düzeyini içerecek şekilde kullanıyorum işlevini değiştirmek için nasıl emin değilim ...

Ben bu işlevi kullanarak ediyorum:

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

Ve sonra bu yapıyor:

$menu = get_tree(4, $tid, -1, 2);
usort($menu, 'cmp');

Ve bu doğru ağırlığına göre sıralamak dizi olacak, ama sıralama başka bir seviyeye eklemek gerekir. Dizi ilk derinliğine göre sıralanır ve sonra ağırlığının böylece.

Böylece, orijinal dizi bu gibi görünüyor eğer:

    Array
(
    [0] => stdClass Object
        (
            [tid] => 24
            [name] => Sample
            [weight] => 3
            [depth] => 0
        )

    [1] => stdClass Object
        (
            [tid] => 66
            [name] => Sample Subcategory
            [weight] => 0
            [depth] => 1
        )

    [2] => stdClass Object
        (
            [tid] => 67
            [name] => Another Example
            [weight] => 1
            [depth] => 0
        )

    [3] => stdClass Object
        (
            [tid] => 68
            [name] => Subcategory for Another Example
            [weight] => 1
            [depth] => 1
        )

    [4] => stdClass Object
        (
            [tid] => 22
            [name] => A third example master category
            [weight] => 0
            [depth] => 0
        )

Sonuç bu gibi görünüyor böylece ilk derinliği, daha sonra ağırlık göre sıralamak yapabilirsiniz:

Array
(
    [0] => stdClass Object
        (
            [tid] => 22
            [name] => A third example master category
            [weight] => 0
            [depth] => 0
        )

    [1] => stdClass Object
        (
            [tid] => 67
            [name] => Another Example
            [weight] => 1
            [depth] => 0
        )

    [2] => stdClass Object
        (
            [tid] => 24
            [name] => Sample
            [weight] => 3
            [depth] => 0
        )

    [3] => stdClass Object
        (
            [tid] => 66
            [name] => Sample Subcategory
            [weight] => 0
            [depth] => 1
        )

    [4] => stdClass Object
        (
            [tid] => 68
            [name] => Subcategory for Another Example
            [weight] => 0
            [depth] => 1
        )

1 Cevap

sayıları karşılaştırırken, sadece onları çıkarma

function cmp($a, $b) {
   $d = $a->depth - $b->depth;
   return $d ? $d : $a->weight - $b->weight;
}