note 50099 added to function.sort
| From: | timc at hlyw dot com | 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