Home  >  Article  >  Backend Development  >  3 ways to sort two-dimensional arrays in PHP and share custom functions

3 ways to sort two-dimensional arrays in PHP and share custom functions

高洛峰
高洛峰Original
2016-12-22 11:18:311311browse

About sorting, generally we sort through the database or nosql (eg: redis) and then output it to the program for direct use. However, sometimes we need to sort the array directly through PHP, and store data in PHP. The most common ones are objects and arrays, but the most processed ones are arrays, because there are very rich built-in function libraries (in fact, objects can also be understood as arrays to a certain extent). These function libraries can help us achieve certain functions to a large extent. Function. Commonly used system functions include sort, asort, arsort, ksort, krsort, etc. Here I mainly talk about sorting two-dimensional arrays, two methods:

1. Use PHP’s own array_multisort function to sort

<?php
    $data = array();
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 1);
    $data[] = array(&#39;volume&#39; => 85, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 98, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 7);
    // 取得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[&#39;volume&#39;];
        $edition[$key] = $row[&#39;edition&#39;];
    }
    array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
    print_r($data);
?>

Output results:

Array
(
    [0] => Array
        (
            [volume] => 98
            [edition] => 2
        )
    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )
    [2] => Array
        (
            [volume] => 86
            [edition] => 6
        )
    [3] => Array
        (
            [volume] => 85
            [edition] => 6
        )
    [4] => Array
        (
            [volume] => 67
            [edition] => 2
        )
    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )
)

2. Custom function sorting 1

<?php
    $data = array();
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 1);
    $data[] = array(&#39;volume&#39; => 85, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 98, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 7);
    // 取得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[&#39;volume&#39;];
        $edition[$key] = $row[&#39;edition&#39;];
    }
    $ret = arraySort($data, &#39;volume&#39;, &#39;desc&#39;);
    print_r($ret);
    /**
     * @desc arraySort php二维数组排序 按照指定的key 对数组进行排序
     * @param array $arr 将要排序的数组
     * @param string $keys 指定排序的key
     * @param string $type 排序类型 asc | desc
     * @return array
     */
    function arraySort($arr, $keys, $type = &#39;asc&#39;) {
        $keysvalue = $new_array = array();
        foreach ($arr as $k => $v){
            $keysvalue[$k] = $v[$keys];
        }
        $type == &#39;asc&#39; ? asort($keysvalue) : arsort($keysvalue);
        reset($keysvalue);
        foreach ($keysvalue as $k => $v) {
           $new_array[$k] = $arr[$k];
        }
        return $new_array;
    }
?>

Output result:

Array
(
    [3] => Array
        (
            [volume] => 98
            [edition] => 2
        )
    [4] => Array
        (
            [volume] => 86
            [edition] => 6
        )
    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )
    [2] => Array
        (
            [volume] => 85
            [edition] => 6
        )
    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )
    [0] => Array
        (
            [volume] => 67
            [edition] => 2
        )
)

One difference between this custom function and the system function is that the custom function only supports sorting for a certain key. If you want to support multiple keys Sorting needs to be performed multiple times; the system function array_multisort can process multiple keys at once and specify multiple sorting rules. The system function is quite powerful. It is recommended to use the system function. After all, it is implemented at the bottom of C. Here is just an example to illustrate how to pass Customize a function to sort the array. Of course, this custom function can also be expanded to support more sorting rules. It is still used a lot in scenarios such as rankings, leaderboards, and results.

3. Custom function sorting 2

The following function sorts a given two-dimensional array according to the specified key value. Let’s look at the function definition first:

function array_sort($arr,$keys,$type=&#39;asc&#39;){ 
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == &#39;asc&#39;){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array; 
}

It can sort the two-dimensional array according to the specified key value. For sorting, you can also specify ascending or descending order (the default is ascending order). Usage example:

$array = array(
 array(&#39;name&#39;=>&#39;手机&#39;,&#39;brand&#39;=>&#39;诺基亚&#39;,&#39;price&#39;=>1050),
 array(&#39;name&#39;=>&#39;笔记本电脑&#39;,&#39;brand&#39;=>&#39;lenovo&#39;,&#39;price&#39;=>4300),
 array(&#39;name&#39;=>&#39;剃须刀&#39;,&#39;brand&#39;=>&#39;飞利浦&#39;,&#39;price&#39;=>3100),
 array(&#39;name&#39;=>&#39;跑步机&#39;,&#39;brand&#39;=>&#39;三和松石&#39;,&#39;price&#39;=>4900),
 array(&#39;name&#39;=>&#39;手表&#39;,&#39;brand&#39;=>&#39;卡西欧&#39;,&#39;price&#39;=>960),
 array(&#39;name&#39;=>&#39;液晶电视&#39;,&#39;brand&#39;=>&#39;索尼&#39;,&#39;price&#39;=>6299),
 array(&#39;name&#39;=>&#39;激光打印机&#39;,&#39;brand&#39;=>&#39;惠普&#39;,&#39;price&#39;=>1200)
);
$ShoppingList = array_sort($array,&#39;price&#39;);
print_r($ShoppingList);

The above is to sort the two-dimensional array $array from low to high according to 'price'.

For more 3 methods of sorting two-dimensional arrays in PHP and custom functions to share 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