[thelist] Sorting 2D array in PHP

kris burford kris at midtempo.net
Fri Mar 18 06:06:06 CST 2005


John wrote:

>I'm finally taking the plunge and learning PHP. I'm currently trying to figure out the easiest way to sort a database-type 2D array
>
<snip>

did this last week and eventually got the code from the php site. this 
worked well for me.

hth

kris

<?
// array sorting from http://uk.php.net/sort
function array_qsort (&$array, $column, $order='SORT_ASC', $first=0, 
$last= -2)
{
  // $array  - the array to be sorted
  // $column - index (column) on which to sort
  //          can be a string if using an associative array
  // $order  - SORT_ASC (default) for ascending or SORT_DESC for descending
  // $first  - start index (row) for partial array sort
  // $last  - stop  index (row) for partial array sort
  // $keys  - array of key values for hash array sort
 if (is_array($array)) {
  $keys = array_keys($array);
 
  if($last == -2) $last = count($array) - 1;
  if($last > $first) {
   $alpha = $first;
   $omega = $last;
   $key_alpha = $keys[$alpha];
   $key_omega = $keys[$omega];
   $guess = $array[$key_alpha][$column];
   while($omega >= $alpha) {
     if($order == 'SORT_ASC') {
       while($array[$key_alpha][$column] < $guess) {$alpha++; $key_alpha 
= $keys[$alpha]; }
       while($array[$key_omega][$column] > $guess) {$omega--; $key_omega 
= $keys[$omega]; }
     } else {
       while($array[$key_alpha][$column] > $guess) {$alpha++; $key_alpha 
= $keys[$alpha]; }
       while($array[$key_omega][$column] < $guess) {$omega--; $key_omega 
= $keys[$omega]; }
     }
     if($alpha > $omega) break;
     $temporary = $array[$key_alpha];
     $array[$key_alpha] = $array[$key_omega]; $alpha++;
     $key_alpha = $keys[$alpha];
     $array[$key_omega] = $temporary; $omega--;
     $key_omega = $keys[$omega];
   }
   array_qsort ($array, $column, $order, $first, $omega);
   array_qsort ($array, $column, $order, $alpha, $last);
  }
 }
  return $array;
}
?>


More information about the thelist mailing list