[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