Sorting a multi-dimensional array

Hello,

I have the following array:

``````Array
(
[0] => Array
(
[0] => 3
[1] => City0
[2] => 64
)

[1] => Array
(
[0] => 6
[1] => City1
[2] => 164
)

[2] => Array
(
[0] => 7
[1] => City2
[2] => 160
)

[3] => Array
(
[0] => 8
[1] => City3
[2] => 188
)

[4] => Array
(
[0] => 9
[1] => City4
[2] => 156
)

[5] => Array
(
[0] => 10
[1] => City5
[2] => 72
)

)
``````

All I need to do is to sort the arrays with the [2] value so that the cities are sorted as:

City3
City1
City2
City4
City5
City0

Is that possible?

Thanks for the help!
Who is Participating?

Commented:
I use this function for exactly that reason:

``````private function aasort(&\$array, \$key) {
if (is_array(\$array)) {
\$sorter = array();
\$ret = array();
reset(\$array);
foreach (\$array as \$ii => \$va) {
\$sorter[\$ii] = \$va[\$key];
}
arsort(\$sorter);
foreach (\$sorter as \$ii => \$va) {
\$ret[\$ii] = \$array[\$ii];
}
//Reset array keys to zero base...
\$array = array_values(\$ret);
return \$array;
}
}
``````

In your case the 2 parameters are the array, and 2 as thats the key you want to sort it on
0

ConsultantCommented:
``````<?php

\$src = array(
array(3,"City0",64),
array(6,"City1",160),
array(7,"City2",160),
array(8,"City3",188),
array(9,"City4",156),
array(10,"City5",72),
);

\$sorted_array = mdarray_sort(\$src,2,SORT_ASC);
print_r(\$sorted_array);

function mdarray_sort(\$srcArray,\$sortColumn,\$sortDirection = 4)
{
\$arrSortData = array();
foreach(\$srcArray as \$srcIDX => \$srcRow)
\$arrSortData[\$srcIDX] = \$srcRow[\$sortColumn];
array_multisort(\$arrSortData,\$sortDirection,\$srcArray);
return \$srcArray;
}
?>
``````
0

Author Commented:
Thank you very much for the answer!
0

ConsultantCommented:
That example uses array_multisort(), which is the built-in PHP function for doing the bulk of this work and doing it quickly and efficiently. My mdarray_sort function is just a wrapper around it. I've also used this function in the past, which supports multiple sorts (I did not write it, though):

``````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;
}
``````
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.