note 50099 added to function.sort

From: Date: Fri, 18 Feb 2005 00:04:41 +0000
Subject: note 50099 added to function.sort
Groups: php.notes 
Request: Send a blank email to php-notes+get-85186@lists.php.net to get a copy of this message
I dig the multi_sort function(s) from above. But, they don't work for hash arrays. I added a keys variable to keep track of the key value as the array gets sorted. Feed back welcome. <?php function array_qsort (&$array, $column=0, $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 $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); } } ?> ---- Manual Page -- http://www.php.net/manual/en/function.sort.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+50099 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+50099&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+50099&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+50099&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+50099&report=yes&reason=useless Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+50099&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+50099&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#85186) next »