Home  >  Article  >  Backend Development  >  Detailed explanation of two-dimensional array sorting problem in PHP

Detailed explanation of two-dimensional array sorting problem in PHP

高洛峰
高洛峰Original
2016-12-22 11:34:471083browse

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!

Statement:
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