Apologies if this is a really basic question. I've inadvertently discovered that asort()
appears to work with multidimensional arrays:
Sample PHP
$animals = array(
1 => array('name' => 'Zebra'),
2 => array('name' => 'Fox'),
3 => array('name' => 'Rabbit'),
4 => array('name' => 'Dog'),
5 => array('name' => 'Cat')
);
asort($animals);
var_dump($animals);
Output
array
5 =>
array
'name' => string 'Cat' (length=3)
4 =>
array
'name' => string 'Dog' (length=3)
2 =>
array
'name' => string 'Fox' (length=3)
3 =>
array
'name' => string 'Rabbit' (length=6)
1 =>
array
'name' => string 'Zebra' (length=5)
I'd like to know why this works?
I thought asort()
only sorted flat arrays, and to sort multidimensional arrays you needed to define a custom sort function. I can't find anything in the documentation that explains the above behaviour.
PHP compares array according to number of elements, for example: arrays with one element will be compared together, and will be sorted at top first, then, PHP looks for similar arrays (based on number of elements) then compare them with each other for sorting, and so on, for example:
using asort, the result will be
a => array(z)
will be first element, because there is no other array with one element, therefore, it will be assigned at first place.This is the transcription of standard array comparison (in PHP)
That's coherent with your case
Arrays are compared in the lexicographical order by their values, so an array where the first element is "cat" is less than an array where the first element is "zebra". This is just a normal single dimension sort that happens to compare arrays to each other.
For example: