Sorting two dimensional array like query result by sub array's key in PHP


PHP offers dozens of functions for sorting arrays, but unfortunately non of this functions support sorting by sub arrays key out of the box. It's very useful when you want to sort the result of a query by an specific column.
Sample :
$users=array( array( 'username'=>'Ashkan1', 'age'=>20, ), array( 'username'=>'Ashkan2', 'age'=>35, ), array( 'username'=>'Ashkan3', 'age'=>18, ), ); $users=arraySortTwoDimByValueKey($users,'age','asc');
Result :
array ( array( 'username'=>'Ashkan3', 'age'=>18, ), array( 'username'=>'Ashkan1', 'age'=>20, ), array( 'username'=>'Ashkan2', 'age'=>35, ), )
And the function :
/** * Sorting two dimensional array by sub-key's value * * @param $array array * @param $by string //Sub-key name * @param $type string //asc,desc * @return array */ function arraySortTwoDimByValueKey($array,$by,$type='asc') { $sortField=&$by; $multArray=&$array; $tmpKey=''; $ResArray=array(); $maIndex=array_keys($multArray); $maSize=count($multArray)-1; for($i=0; $i < $maSize ; $i++) { $minElement=$i; $tempMin=$multArray[$maIndex[$i]][$sortField]; $tmpKey=$maIndex[$i]; for ($j=$i+1; $j <= $maSize; $j++) { if ($multArray[$maIndex[$j]][$sortField] < $tempMin ) { $minElement=$j; $tmpKey=$maIndex[$j]; $tempMin=$multArray[$maIndex[$j]][$sortField]; } } $maIndex[$minElement]=$maIndex[$i]; $maIndex[$i]=$tmpKey; } if ($type=='asc') { for ($j=0;$j<=$maSize;$j++) { $ResArray[$maIndex[$j]]=$multArray[$maIndex[$j]]; } } else { for ($j=$maSize;$j>=0;$j--) { $ResArray[$maIndex[$j]]=$multArray[$maIndex[$j]]; } } return $ResArray; }
- برای ارسال نظرات وارد شوید
-
نظرات
Thanks. Very Nice. Thanks You
Thanks. Very Nice. Thanks You Admin For Sharing.