[thelist] Multidimensional Array sort

Alexis Antonakis admin at antonakis.co.uk
Thu Mar 11 17:24:07 CST 2004


Thanks JJS, that really is a much cleaner, and more flexible function 
that the one I found, so I have moved over to it

Regards
Alexis

J.J.SOLARI wrote:
>>Date: Wed, 10 Mar 2004 16:25:03 -0400
> 
> 
>     [...]
>      
> 
> 
>>but if I change the 'inner' array from numbers to "words", then it
> 
> does 
> 
>>not:
>>
>>Array
>>(
>>     [0] => Array
>>         (
>>             [Callsign] => EJM10
>>             [Sort] => EJM10
>>             [ID] => 23
>>             [Type] => C550
>>         )
>>
>>     [1] => Array
>>         (
>>             [Callsign] => EJM1
>>             [Sort] => EJM1
>>             [ID] => 11
>>             [Type] => A550
>>         )
> 
> 
>     [...]
>     
> 
>>I have tried :-array_multisort($ar[1], $ar[0], ar[2], $ar[3]), but it 
>>doesn't sort.
>>I have tried :-array_multisort($ar["Sort"], $ar["Callsign"], ar["ID"], 
>>$ar["Type"]), but I get the following message:
>>Warning: Argument 1 to array_multisort() is expected to be an array or
> 
> a 
> 
>>sort flag
>>
>>Any advice would be really appreciated.
>>
>>BTW, I am trying to sort on the the 'Sort' field and would like a 
>>Natural sort.
> 
> 
> Alexis,
> 
> Look on php.net, in the user comments for the function array_multisort,
> <http://fr3.php.net/manual/en/function.array-multisort.php>
> 
> There is a beautiful function named 'array_csort', coded by Ichier, that
> reproduce the ORDER BY instruction of SQL.
> 
> The structure of your array needs to be:
> 
> $arrayUnsorted = array(
>     array(
>         "Sort" => "valsort1",
>         "Callsign" => "valcallsign1",
>         "Id" => "valid1",
>         "Type" => "valType1" ),
>     array(
>         "Sort" => "valsort2",
>         "Callsign" => "valcallsign2",
>         "Id" => "valid2",
>         "Type" => "valType2" ),
>     array( etc. )
>     ...
>     );
> 
> Then, for example, you would sort your array by "Sort" like this:
> 
> $arraySorted = array_csort( $arrayUnsorted, "Sort", "Callsign", "Id",
> "Type" );
> 
> Note that you just need to order your array keys by sorting order
> priority (here you sort by "Sort" :-). Else, you can specify sort_flags
> which apply to the preceding key.
> 
> For example, you could do:
> array_csort( $arrayUnsorted, "Sort", SORT_DESC, SORT_STRING, "Callsign",
> "ID", "Type") for descending sort and all values treated as strings.
> 
> Really nice function,
> 
> hih,
> 
> JJS.




More information about the thelist mailing list