php - Group and sort an array of objects based on 2 parameters -


i have array of objects want sort based on 1 property, , kind of 'group together' based on property. in example below, them sorted based on $sequence, , grouped based on $artist.

// stripped down version of class :

<?php class myclass {     public $sequence;     public $artist;      function __construct($sequence,$artist)     {         $this->sequence=$sequence;         $this->artist=$artist;     }      static function cmp_myclass_sequence($a, $b)     {         $a_seq = $a->sequence;         $b_seq = $b->sequence;         if ($a_seq == $b_seq) {             return 0;         }         return ($a_seq > $b_seq) ? +1 : -1;     }     static function cmp_myclass_artist($a, $b)     {         $a_art = strtolower($a->artist);         $b_art = strtolower($b->artist);         if ($a_art == $b_art) {             return 0;         }         return ($a_art > $b_art) ? +1 : -1;     } }  //some objects of class using testing :  $myobj1 = new myclass(1,'a'); $myobj2 = new myclass(1,'b'); $myobj3 = new myclass(1,'c'); $myobj4 = new myclass(2,'a'); $myobj5 = new myclass(2,'b'); $myobj6 = new myclass(2,'c'); $myobj7 = new myclass(4,'a'); $myobj8 = new myclass(5,'a'); $myobj9 = new myclass(3,'b'); $myobj10 = new myclass(3,'g'); $myobj11= new myclass(3,'a');  $myarr=array($myobj1,$myobj2,$myobj3,$myobj4,$myobj5,$myobj6,$myobj7,$myobj8,$myobj9,$myobj10,$myobj11);  echo "my array before sort : <br>"; foreach ($myarr $obj){ print_r($obj); echo "<br>"; }  usort($myarr, array("myclass", "cmp_myclass_sequence")); //usort($myarr, array("myclass", "cmp_myclass_artist"));   echo "my array after sort : <br>"; foreach ($myarr $obj){ print_r($obj); echo "<br>";}  ?> 

both sorting functions have in class, cmp_myclass_sequence , cmp_myclass_artist work on own. not sure how array grouped in way : artists come first, b , on. amongst artists, objects should sorted sequence int of object.

in short result looking :

/* array after sort :   myclass object ( [sequence] => 1 [artist] => ) myclass object ( [sequence] => 2 [artist] => ) myclass object ( [sequence] => 3 [artist] => ) myclass object ( [sequence] => 4 [artist] => ) myclass object ( [sequence] => 5 [artist] => ) myclass object ( [sequence] => 1 [artist] => b ) myclass object ( [sequence] => 2 [artist] => b ) myclass object ( [sequence] => 3 [artist] => b ) myclass object ( [sequence] => 1 [artist] => c ) myclass object ( [sequence] => 2 [artist] => c ) myclass object ( [sequence] => 3 [artist] => g )  */ 

you can 1 compare function:

function sort_c_arr($item_1, $item_2) {    if($item_1->artist != $item_2->artist)    {       return strcmp($item_1->artist, $item_2->artist);    }    return $item_1->sequence - $item_2->sequence; } // ... usort($arr, 'sort_c_arr'); 

Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

android - layout with fragment and framelayout replaced by another fragment and framelayout -