One-dimensional array ordering can be Asort, Ksort, and other methods of process sequencing, relatively simple. How does the ordering of the two-dimensional arrays be implemented? This can be achieved using Array_multisort and Usort.
For example, an array like the following:
Copy the code code as follows:
$users = Array (
Array (' name ' = ' Tom ', ' age ' = 20)
, Array (' name ' = ' Anny ', ' age ' = 18)
, Array (' name ' = ' Jack ', ' age ' = 22)
);
I want to be able to sort by age from small to large. The author has collated two methods to come out, shares to everybody.
1. Using Array_multisort
Using this method, it would be more troublesome to extract the age to be stored in a one-dimensional array, and then in ascending order. The specific code is as follows:
Copy the code code as follows:
$ages = Array ();
foreach ($users as $user) {
$ages [] = $user [' Age '];
}
Array_multisort ($ages, SORT_ASC, $users);
After execution, $users is a sorted array and can be printed out to see. If you need to first sort by age, and then by name in ascending order, the same way, is to extract an array of names, the final sorting method to call:
Copy the code code as follows:
Array_multisort ($ages, SORT_ASC, $names, SORT_ASC, $users);
2. Using Usort
The biggest benefit of using this method is that you can customize some of the more complex sorting methods. For example, sort by name in descending order of length:
Copy the code code as follows:
Usort ($users, function ($a, $b) {
$al = strlen ($a [' name ']);
$BL = strlen ($b [' name ']);
if ($al = = $BL)
return 0;
Return ($al > $bl)? -1:1;
});
Anonymous functions are used here and can be extracted separately if necessary. A $ A, $b can be understood as an element under the $users array, you can directly index the name value, calculate the length, and then compare the length.
I prefer the second approach because there are fewer steps to extract the sorted content to a one-dimensional array, and the ordering method is more flexible.