Home >Backend Development >PHP Tutorial >Detailed explanation of two-dimensional array sorting problem in PHP
To sort a two-dimensional array in PHP, you can use the PHP built-in function uasort()
Example 1:
Use a user-defined comparison function to sort the values in the array and maintain the index association
The callback function is as follows: Pay attention to the callback function When the return value is negative or false, it means that the first parameter of the callback function is arranged first and the second parameter is arranged last.
$person = array( array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21), array('num'=>'001','id'=>7,'name'=>'ahangsan','age'=>23), array('num'=>'003','id'=>1,'name'=>'bhangsan','age'=>23), array('num'=>'001','id'=>3,'name'=>'dhangsan','age'=>23), ); //负数或者false表示第一个参数应该在前 function sort_by_name($x,$y){ return strcasecmp($x['name'],$y['name']); }
is used as follows:
uasort($person,'sort_by_name');
A two-dimensional array is given below Sorting method, for reference and interview use:
//$array 要排序的数组 //$row 排序依据列 //$type 排序类型[asc or desc] //return 排好序的数组 function array_sort($array,$row,$type){ $array_temp = array(); foreach($array as $v){ $array_temp[$v[$row]] = $v; } if($type == 'asc'){ ksort($array_temp); }elseif($type='desc'){ krsort($array_temp); }else{ } return $array_temp; }
Example 2:
One-dimensional array sorting can use some methods such as asort and ksort to process sorting, which is relatively simple. How to implement sorting of two-dimensional arrays? You can use array_multisort and usort to achieve
For example, an array like the following:
The code is as follows:
$users = array( array('name' => 'tom', 'age' => 20) , array('name' => 'anny', 'age' => 18) , array('name' => 'jack', 'age' => 22) );
I hope to sort by age from small to large. The author has sorted out two methods and shared them with you.
1. Use array_multisort
Using this method will be more troublesome. You need to extract the age and store it in a one-dimensional array, and then arrange it in ascending order by age. The specific code is as follows:
The code is as follows:
$ages = array(); foreach ($users as $user) { $ages[] = $user['age']; } array_multisort($ages, SORT_ASC, $users);
After execution, $users is a sorted array, which can be printed out to see. If you need to sort by age in ascending order first, and then by name in ascending order, the method is the same as above, that is, extract an additional name array. The final sorting method is called like this:
The code is as follows:
array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);
2. Use usort
The biggest advantage of using this method is that you can customize some more complex sorting methods. For example, sort in descending order by the length of the name:
The code is 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 they can be extracted separately if necessary. Among them, $a and $b can be understood as elements under the $users array. You can directly index the name value, calculate the length, and then compare the lengths.
================================================== =====================
Here are some functions of PHP sorting by the way
sort Sorting arrays is generally suitable for one-dimensional index arrays and will not maintain Index
rsort Sorts the array in reverse order and has the same usage as sort
asort Sorts the array and maintains the index relationship. Sorts the values. It is generally suitable for one-dimensional arrays and maintains the index relationship.
arsort Sorts the array in reverse and maintains the index relationship. Same usage as asort
ksort sorts the array according to the key name
krsort sorts the array in reverse order according to the key name
For more detailed explanations of two-dimensional array sorting problems in PHP and related articles, please pay attention to the PHP Chinese website!