Ichier » coding » ichier's coding corner
{ php }  
  array_csort
date feb.03
update jun.03
code <?php
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;
}
?>
description sort multidimensional arrays by column

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*)

.. waiting this func to be included to the next php-release *gg*
syntax <?php
array = array_multisort(array input [, string key [, 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):

<?php
    $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:

<?php
    $array 
array_csort($array,'town','age',SORT_DESC,'name');
?>

here the resulting array would be:

<?php
    $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";
?>