zoukankan      html  css  js  c++  java
  • array_multisort 函数的使用

    w3c上的解释

    定义和用法

    array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。

    注释:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。

    注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。

    语法如下:

    array_multisort(array1,sorting order,sorting type,array2,array3...)

    看了半天的例子还是没怎么看懂,在此举个例子说明下该函数的意思:

    有一个多维数组如下:

    $guys = [
        [
            'number'=>'1',
            'score' => 90,
            'name'  => 'song',
        ],
        [
            'number'=>'2',
            'score' => 90,
            'name'  => 'dong',
        ],
        [
            'number'=>'3',
            'score' => 80,
            'name'  => 'mong',
        ]
    ];

    三个学生的数据,number代表学号,score是成绩,name是姓名。对学生进行排序,首先按照成绩从高到低,再按照姓名按照字符串从低到高排序,按照我们的要求,那么排好后的顺序应该是:

    2、1、3

    下面将如何用该函数实现:

    首先提取出来成绩和姓名数组。使用该函数,参数中每个数组的长度要一样,否则会报错的。

    $scores = array();
    $names  = array();
    
    foreach ($guys as $value) {
        $scores[] = $value['score'];
        $names[]  = $value['name'];
    }

    提取的姓名数组,成绩数组和需要排序的学生数组都是有三项,符合要求。先按照成绩降序,如果成绩相同,再按照名字升序。如果成绩都不相同,那么名字排序是没用的。

    array_multisort($scores,SORT_DESC,$names,SORT_ASC,$guys);
    print_r($scores);
    print_r($names);
    print_r($guys);

    打印出来的效果如下:

    Array
    (
        [0] => 90
        [1] => 90
        [2] => 80
    )
    Array
    (
        [0] => dong
        [1] => song
        [2] => mong
    )
    Array
    (
        [0] => Array
            (
                [number] => 2
                [score] => 90
                [name] => dong
            )
    
        [1] => Array
            (
                [number] => 1
                [score] => 90
                [name] => song
            )
    
        [2] => Array
            (
                [number] => 3
                [score] => 80
                [name] => mong
            )
    
    )
    

    排序前后,三个数组的顺序都是一一对应的,即三个数组是同步变化的,所以达到了对第三个数组的排序。

  • 相关阅读:
    jQuery点击事件解绑
    js添加key为数字的对象,通过类似于通过访问数组的中括号形式访问对象属性
    JS区分中英文字符的两种方法: 正则和charCodeAt()方法
    js时间比较,获取n天后(前)的日期
    js延迟函数
    @RequestBody和@ModelAttribute注解
    HttpServletRequest
    java异常处理之throw, throws,try和catch
    js去除空格,判断是否包含
    CSS :focus 选择器
  • 原文地址:https://www.cnblogs.com/wyzs/p/5257425.html
Copyright © 2011-2022 走看看