note 33040 added to function.array-multisort
| From: | (www.ichier.de) | Date: | Sat, 14 Jun 2003 21:00:49 +0000 |
| Subject: | note 33040 added to function.array-multisort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-50352@lists.php.net to get a copy of this message | ||
ok, now i made it a real (prooved) function, cause i needed to sort by two of the columns and it
didn't work, sorting twice...
is was kinda tricky, cause i never handled with eval in php, but now it's quite superb - ok i
didn't any errorhandling, but who cares *g*
___________
the function:
function array_csort() { //coded by Ichier2003
$args = func_get_args();
$marray = array_shift($args);
$msortline = "return(array_multisort(";
foreach ($args as $arg) {
$i++;
if (is_string($arg)) {
foreach ($marray as $row) {
$sortarr[$i][] = $row[$arg];
}
} else {
$sortarr[$i] = $arg;
}
$msortline .= "\$sortarr[".$i."],";
}
$msortline .= "\$marray));";
eval($msortline);
return $marray;
}
the fine thing is, you can add as many parameters you need, and you can add sort_flags as well (but
be shure not to put em into " or ' - took some time for me to get this *g*)
______
syntax:
$new_array = array_multisort($array [, 'col1' [, SORT_FLAG [, SORT_FLAG]]]...);
__________
explanation:
$array is the array you want to sort, 'col1' is the name of the column you want to sort,
SORT_FLAGS are : SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING
you can repeat the 'col',FLAG,FLAG, as often you want, the highest prioritiy is given to
the first - so the array is sorted by the last given column first, then the one before ...
_______
example:
in my case the array has it's index as first dimension (i like that for using foreach later):
$array[0]['name'] = "Niko";
$array[0]['age'] = 24;
$array[0]['town'] = "Berlin";
$array[1]['name'] = "Dennis";
$array[1]['age'] = 34;
$array[1]['town'] = "Berlin";
$array[2]['name'] = "Oliver";
$array[2]['age'] = 44;
$array[2]['town'] = "Aachen";
$array[3]['name'] = "Andi";
$array[3]['age'] = 34;
$array[3]['town'] = "Berlin";
_____________________
use the function like this:
$array = array_csort($array,'town','age',SORT_DESC,'name');
here the resulting array would be:
$array[0]['name'] = "Oliver";
$array[0]['age'] = 44;
$array[0]['town'] = "Aachen";
$array[1]['name'] = "Andi";
$array[1]['age'] = 34;
$array[1]['town'] = "Berlin";
$array[2]['name'] = "Dennis";
$array[2]['age'] = 34;
$array[2]['town'] = "Berlin";
$array[3]['name'] = "Niko";
$array[3]['age'] = 24;
$array[3]['town'] = "Berlin";
that should be enough :)
.. waiting this fuc to be included to the next php-release *gg*
hope it helps you..Niko
----
Manual Page -- http://www.php.net/manual/en/function.array-multisort.php
Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+33040
Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+33040&report=yes
Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+33040&report=yes