Home > Article > Backend Development > Example of specifying multi-field sorting for PHP multidimensional arrays
This article mainly introduces examples of specifying multi-field sorting for PHP multi-dimensional arrays. It has a certain reference value. Now I share it with you. Friends in need can refer to it.
Introducing the array_multisort method
array_multisort — Sort multiple arrays or multidimensional arrays. The instructions in the PHP manual are as follows:
Copy code The code is as follows:
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
Parameters
arr
An array to be sorted.
#arg
Each of the following parameters can be another array or a sorting flag option parameter for the previous array: SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.
…
Additional arg's.
First implement the sorting of one field of the specified multi-dimensional array
Here it is required to sort the array according to one of the fields. The array assumptions are as follows:
$array = array( 0=>array('id'=>8,'name'=>'Tom'), 1=>array('id'=>9,'name'=>'Peter'), 2=>array('id'=>5,'name'=>'Jack') );
We need to sort according to the id value of the two-dimensional array. The converted array format is as follows:
$array = array( 0=>array('id'=>5,'name'=>'Jack') 1=>array('id'=>8,'name'=>'Tom'), 2=>array('id'=>9,'name'=>'Peter') );
To complete the above conversion, you need to use the array_multisort function introduced above, as follows:
function sortArrByOneField(&$array, $field, $desc = false){ $fieldArr = array(); foreach ($array as $k => $v) { $fieldArr[$k] = $v[$field]; } $sort = $desc == false ? SORT_ASC : SORT_DESC; array_multisort($fieldArr, $sort, $array); }
By The $field of each array in the sorted array is stored in a one-bit array fieldArr and participates in sorting in the incoming array_multisort. The value of the field array is as follows:
array(0=>8,1=>9,2=>5)
After passing in array_multisort, it is equivalent to sorting the $field one-dimensional array, and then rebuilding it based on the sorted key The incoming array to be sorted.
Implementing sorting of multi-dimensional arrays by specifying multiple fields
The above example explains how to implement sorting of multi-dimensional arrays by specifying one field, but if you want How to think about specifying multiple fields to sort an array?
How many fields are there? 2, 3 or more, so this uncertain factor needs to be eliminated.
Let’s first look at the 2 solutions for specifying 2 fields for sorting:
$arr = array( '0' => array( 'id' => 3, 'age' => 27 ), '1' => array( 'id' => 5, 'age' => 50 ), '2' => array( 'id' => 4, 'age' => 44 ), '3' => array( 'id' => 3, 'age' => 78 ) ); foreach ( $arr as $key => $row ){ $id[$key] = $row ['id']; $age[$key] = $row ['age']; } array_multisort($id, SORT_ASC, $age, SORT_DESC, $arr); print_r($arr); //result:Array([0]=>Array(['id']=>3 ['age']=>78) [1]=>Array(['id']=>3 ['age']=>27) [2]=>Array(['id']=>4 ['age']=>44) [3]=>Array(['id']=>5 ['age']=>50))
Refactor the above code, just use php The func_get_args function in can dynamically obtain the incoming value, which can solve the problem of uncertain number of multiple fields. The implementation is as follows:
$array1 = array( 0=>array('id'=>8,'name'=>'Apple','age'=> 18), 1=>array('id'=>8,'name'=>'Bed','age'=>17), 2=>array('id'=>5,'name'=>'Cos','age'=>16), 3=>array('id'=>5,'name'=>'Cos','age'=>14) ); function sortArrByManyField(){ $args = func_get_args(); if(empty($args)){ return null; } $arr = array_shift($args); if(!is_array($arr)){ throw new Exception("第一个参数不为数组"); } foreach($args as $key => $field){ if(is_string($field)){ $temp = array(); foreach($arr as $index=> $val){ $temp[$index] = $val[$field]; } $args[$key] = $temp; } } $args[] = &$arr;//引用值 call_user_func_array('array_multisort',$args); return array_pop($args); } $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC); print_r($arr);
The running result is as follows:
array(4) { [0]=>array(3) { ["id"]=>int(5) ["name"]=>string(3) "Cos" ["age"]=>int(16) } [1]=>array(3) { ["id"]=>int(5) ["name"]=>string(3) "Cos" ["age"]=>int(14) } [2]=>array(3) { ["id"]=>int(8) ["name"]=>string(5) "Apple" ["age"]=>int(18) } [3]=>array(3) { ["id"]=>int(8) ["name"]=>string(3) "Bed" ["age"]=>int(17) } }
The above is the entire content of this article, thank you for reading. Please pay attention to the PHP Chinese website for more information!
Related recommendations:
php strftime function to obtain date and time (switch usage)
PHP multi-task second-level timer Implementation method
The above is the detailed content of Example of specifying multi-field sorting for PHP multidimensional arrays. For more information, please follow other related articles on the PHP Chinese website!