1

I'm having a problem to sort multidimensional array.

print_r($myarray); is giving following output:

Array
(
    [0] => Array
        (
            [ID] => 10
            [Code] => 12-111
            [Name] => putup1
        )

    [1] => Array
        (
            [ID] => 11
            [Code] => 12-21
            [Name] => putup2
        )
    [2] => Array
        (
            [ID] => 12
            [Code] => 12-1
            [Name] => putup2
        ) 
  )

I took a reference from this link: Sort MultiDimensional Array and sorted using column Code. it given me output like this:

Array
    (
      [0] => Array
                 (
                  [ID] => 10
                  [Code] => 12-1
                  [Name] => putup1
                 )
      [1] => Array
                 (
                   [ID] => 12
                   [Code] => 12-111
                   [Name] => putup2
                 ) 
      [2] => Array
                 (
                   [ID] => 11
                   [Code] => 12-21
                   [Name] => putup2
                 )
     )

And I expecting output like :

Array
        (
          [0] => Array
                     (
                      [ID] => 10
                      [Code] => 12-1
                      [Name] => putup1
                     )
          
          [2] => Array
                     (
                       [ID] => 11
                       [Code] => 12-21
                       [Name] => putup2
                     )
         [1] => Array
                     (
                       [ID] => 12
                       [Code] => 12-111
                       [Name] => putup2
                     ) 
         )

Is it possible? Please suggest me... Thank you :)

Community
  • 1
  • 1
Ravikumar Sharma
  • 3,678
  • 5
  • 36
  • 59

1 Answers1

1

You are currently sorting on code, but as text and not as a number. To sort it as you want, you have to write a comparison function that indicates whether one code is bigger than another:

function sortByCode($a, $b) {
    $aParts = explode('-', $a['Code']);
    $bParts = explode('-', $b['Code']);
    for ($i = 0; $i < count($aParts); $i++) {
        if ($aParts[$i] < $bParts[$i]) {
            return -1;
        } else if ($aParts[$i] > $bParts[$i]) {
            return 1;
        }
    }
    return 0;
}

usort($myArray, 'sortByCode');
Sjoerd
  • 74,049
  • 16
  • 131
  • 175