How can I sort the sub arrays from a multidimensional array by keys?

Issue

I have this array for example:

$exampleArray = array (
                    array( 'Name' => 'Opony', 'Kod' =>'OPO',  'Price' => 100 ),
                    array( 'Kod' =>'OLE', 'Name' => 'Olej', 'Price' => 20 ),
                    array( 'Kod' =>'ABC', 'Price' => 20, 'Name' => 'abcdefg' )
                )

Keys in sub array are in random order. I want to sort the sub arrays by key:

Array
(
    [0] => Array
        (
            [Kod] => OPO
            [Name] => Opony
            [Price] => 100
        )
    [1] => Array
       (
            [Kod] => OLE
            [Name] => Olej
            [Price] => 20
       )

I try this:

function compr($x,$y){
  if($x == $y)
     return 0;
  elseif($x>$y)
     return 1;
  elseif($x<$y)
    return-1;
}

uksort($exampleArray, 'compr');

print_r($exampleArray);

But this code doesn’t give me my expected result, what is wrong, how can I solve it?

Solution

This should work for you:

Just loop through all of your inner Arrays by reference and then just use uksort() with strcasecmp() to sort your inner Arrays by the keys.

foreach($exampleArray as &$v) {
    uksort($v, function($a, $b){
        return strcasecmp($a, $b);
    });
}

unset($v); //So if you use $v later it doesn't change the last element of the array by reference

output:

Array
(
    [0] => Array
        (
            [Kod] => OPO
            [Name] => Opony
            [Price] => 100
        )
    //...
    [2] => Array
        (
            [Kod] => ABC
            [Name] => abcdefg
            [Price] => 20
        )

)

Answered By – Rizier123

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published