Sample code for specifying multi-field sorting for PHP multi-dimensional array_php example

jacklove
Release: 2023-04-01 18:40:02
Original
2337 people have browsed it

This article mainly introduces the sample code for specifying multi-field sorting of PHP multi-dimensional arrays. The editor thinks it is quite good, so I will share it with you now and give it as a reference. Let’s follow the editor and take a look.

Introducing the array_multisort method

array_multisort — Sort multiple arrays or multi-dimensional arrays. The instructions in the PHP manual 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')
  );
Copy after login


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')
  );
Copy after login


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);
  }
Copy after login


Participate in sorting in the incoming array_multisort by saving the $field of each array of the array to be sorted in the one-bit array fieldArr. The value of the field array is as follows:


array(0=>8,1=>9,2=>5)
Copy after login


After passing in array_multisort, it is equivalent to sorting the $field one-dimensional array, and then according to The sorted keys reconstruct 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 options 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))
Copy after login


Reconstruction In the above code, as long as the func_get_args function in PHP is used to dynamically obtain the incoming value, it 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);
Copy after login


The running result is as follows:

array(4) {
[ 0]=>array(3) {
                                                                                                                                                                                                                                                                       Since | >string(3) "Cos"
                                                                                                                                                                                                             > = & gt; array (3) {
["ID"] = & gt; int >int(17)
}
}



The above is the entire content of this article. I hope it will be helpful to everyone’s study. I also hope that everyone will support php Chinese website. .

Articles you may be interested in:

PHP implements multiple image upload and single image upload functions php examples

php implements name based on Classes and methods in alphabetical order (instance codes) php examples

Detailed explanation of PHP mobile phone SMS verification code implementation process php examples

The above is the detailed content of Sample code for specifying multi-field sorting for PHP multi-dimensional array_php example. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template