


Example of specifying multi-field sorting for PHP multidimensional arrays
Jun 01, 2018 am 10:08 AMThis 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!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian

How To Set Up Visual Studio Code (VS Code) for PHP Development
