Detailed explanation of two-dimensional array sorting problem in PHP, two-dimensional array sorting_PHP tutorial

WBOY
Release: 2016-07-13 09:44:28
Original
1019 people have browsed it

Detailed explanation of two-dimensional array sorting problem in PHP, two-dimensional array sorting

Two-dimensional array sorting in PHP, you can use PHP built-in function uasort()

Example 1:

Use user-defined comparison function to sort values ​​in array and maintain index association

The callback function is as follows: Note that when the return value of the callback function is a negative number or false, it means that the first parameter of the callback function comes 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']);
}
Copy after login

Use as follows:

uasort($person,'sort_by_name');
Copy after login

The following is a two-dimensional array 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;
}
Copy after login

Example 2:

One-dimensional array sorting can be sorted by process using asort, ksort and other methods, which is relatively simple. How to implement sorting of two-dimensional arrays? This can be achieved using array_multisort and usort

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

I hope I can sort them by age from small to large. The author has sorted out two methods and shared them with everyone.

1. Use array_multisort

Using this method, it 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);
Copy after login

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

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 name length:

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

Anonymous functions are used here and 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 sorts an array generally applies to one-dimensional indexed arrays and does not maintain indexes

rsort sorts the array in reverse order The usage is the same as sort

asort sorts the array and keeps the index relationship to sort the values. It is generally suitable for one-dimensional arrays and keeps the index relationship

arsort sorts the array in reverse order and maintains the index relationshipThe usage is consistent with asort

ksort sorts the array by key name

krsort sorts the array in reverse order by key name

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1049118.htmlTechArticleDetailed explanation of two-dimensional array sorting problem in PHP, two-dimensional array sorting Two-dimensional array sorting in PHP, you can use PHP Built-in function uasort() Example 1: Using user-defined comparison function logarithm...
Related labels:
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!