1

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?

Rizier123
  • 57,440
  • 16
  • 89
  • 140
Marcin Jaworski
  • 330
  • 2
  • 9

1 Answers1

2

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
        )

)
Rizier123
  • 57,440
  • 16
  • 89
  • 140