# 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
(
 => Array
(
[Kod] => OPO
[Name] => Opony
[Price] => 100
)
 => 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
(
 => Array
(
[Kod] => OPO
[Name] => Opony
[Price] => 100
)
//...
 => Array
(
[Kod] => ABC
[Name] => abcdefg
[Price] => 20
)

)
`````` 