• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 311
  • Last Modified:

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
        )

)

Open in new window


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!
0
infodigger
Asked:
infodigger
  • 2
1 Solution
 
SlimshaneeyCommented:
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;
        }
    }

Open in new window


In your case the 2 parameters are the array, and 2 as thats the key you want to sort it on
0
 
gr8gonzoConsultantCommented:
<?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;
}
?>

Open in new window

0
 
infodiggerAuthor Commented:
Thank you very much for the answer!
0
 
gr8gonzoConsultantCommented:
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;
}

Open in new window

0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now