zoukankan      html  css  js  c++  java
  • PHP:第四章——数组中的排序函数

    <pre>
    <?php
    header("Content-Type:text/html;charset=utf-8");
    //1)
    /*sort - 对数组进行升序排序,返回新排好序的数组
    原形:bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )*/
    /*$b = array ( 0 => 'x', 1 => 'y', 2 => 'd', 3 => 'l');
    sort($b);//排序
     print_r($b);//结果: Array ( [0] => d [1] => l [2] => x [3] => y )*/
    /*
    参数说明:
    可选的第二个参数 sort_flags 可以用以下值改变排序的行为:
    排序类型标记:    
    SORT_REGULAR - 正常比较单元(不改变类型)
    SORT_NUMERIC - 单元被作为数字来比较
    SORT_STRING - 单元被作为字符串来比较
    SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
    SORT_NATURAL - 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。
    SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串 
    */
    //例:
    /*$a = array ( 'x', 'd', 'X');
    sort($a, SORT_STRING|SORT_FLAG_CASE);    
    print_r($a);    */
    // X区分大小写时候小于 d, 在不区分大小写时候  d<X
    //结果:Array ( [0] => d [1] => X [2] => x ) 
    
    //2)
    /*
    rsort — 对数组逆向排序,是按降序排序,其他与sort等同
    原形:bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
    */
    //例:
    /*$a = array ( 'x', 'y', 'd', 'l');
    rsort($a);    
    print_r($a);//结果:Array ( [0] => y [1] => x [2] => l [3] => d )
    */
    
    //3) asort与arsort - 经常保留原有的键值更有意义
    /*$a = array (1=>168, 2=>58, 3=>99 );
    asort($a);    
    print_r($a);
    //输出:Array ( [2] => 58 [3] => 99 [1] => 168 ) 
    //倒序用arsort($a)  即可得到:Array ( [1] => 168 [3] => 99 [2] => 58 ) */
    
    //4)shuffle将数组打乱:
    //功能:将数组打乱
    //例:
    /*$a = range (1,54); //54张牌用 54个编号描述
    shuffle($a);
    $i =0; 
    $k =0;
    foreach($a as $v){
        echo $v," ";
        $i++;
        if($i%17 == 0){ 
            $k++;
            echo ":玩家$k <br>------<br>";            
        }
    } 
    */
    
    //5) array_rand 随机函数
    /*$a = array('d','l','x','y');
    $ky=array_rand($a);  //注意他返回的是 键名,或者是包含键名的数组
    var_dump($a[$ky]);*/
    
    /*$a = array('d','l','x','y');
    $ky=array_rand($a,2);  //取两个随机键名
    var_dump($ky);*/
    
    //6)array_multisort()对多个数组或多维数组进行排序
    //例:
    /*$ar1 = array(10, 100, 100, 0);
    $ar2 = array(1, 3, 2, 4);
    array_multisort($ar1, $ar2);
    var_dump($ar1);
    var_dump($ar2);*/
    //输出如下
    /*array (size=4)
      0 => int 0
      1 => int 10
      2 => int 100
      3 => int 100
    
    array (size=4)
      0 => int 4
      1 => int 1
      2 => int 2
      3 => int 3*/
    //例:
    /*$ar = array(
    array("10", 11, 100, 100, "a"),
    array(   1,  2, "2",   3,   1)
    );
    array_multisort($ar[0], SORT_ASC, SORT_STRING,$ar[1], SORT_NUMERIC, SORT_DESC);
    var_dump($ar);*/
    
    //6)natsort 自然排序
    /*$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
    asort($array1); 
    print_r($array1);
    natsort($array2); 
    print_r($array2); */
    //输出:
    /*Array
    (
        [3] => img1.png
        [1] => img10.png
        [0] => img12.png
        [2] => img2.png
    )*/
    /*Array
    (
        [3] => img1.png
        [2] => img2.png
        [1] => img10.png
        [0] => img12.png
    )*/
    
    //7) natcasesort 自然排序不区分大小写
    
    //8) usort - 使用用户自定义的比较函数对数组中的值进行排序 
    /*function cmp($a, $b){
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
    $a = array(3, 2, 5, 6, 1);
    usort($a, "cmp");
    foreach ($a as $key => $value) {
        echo "$key: $value
    ";
    }*/
    //输出:
    /*0: 1
    1: 2
    2: 3
    3: 5
    4: 6*/
    ?>
    <pre>
    <?php
    header("Content-Type:text/html;charset=utf-8");
    /*知识点一:数组排序函数应用场景
        应用场景:经常从数据库读出的数据,会保存到数组中,对这些数据排序就非常实用。
        例如:按产品销量、人气、价格、等进行从高到低或从低到高的排序。
    
    知识点二:数组排序
        数组函数中有基于键来排序也有基于值来排序的 ,以下几个问题也很值得注意。
        1) 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 ...)。 
        2) 排序的顺序有:字母表顺序, 由低到高(升序),由高到低(降序),
            数字排序,自然排序,随机顺序或者用户自定义排序。 
        3) 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。 
        4) 以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的)。
        
    
    知识点三:按值排序的函数
        sort()                由低到高,重新索引(所有从新索引的原键都丢失,下面不在重复说明) 
        rsort()                由高到低,重新索引  
        asort()             由低到高,保留原来键值对关系
        arsort()             由高到低,保留原来键值对关系
        usort()                由用户定义,重新索引 
        uasort()            由用户定义,保留原来键值对关系
        shuffle()             随机相关函数有array_rand() 
        natsort()             自然排序 natcasesort() 
        natcasesort()         自然排序,大小写不敏感 natsort() 
        array_multisort()     键值关联的保持,数字类型的不保持 第一个数组或者由选项指定  
        
    
    知识点四:按键排序的函数,都能够保留键值对应关系
        krsort()      由高到低
        ksort()        由低到高
        uksort()     由用户定义 uasort() 
    
    说明:以上函数记忆方法  
        sort 排序
        r代表倒序,        reverse    的简写
        k代表键,         key    的简写  
        a代表管理,        association    简写
        u代表用户,        user    的简写
        nat自然排序,    natural 自然的简写
        shuffle:洗牌,随机*/
    ?>
    
    
  • 相关阅读:
    日志框架1---多种日志门面和日志实现初步了解(转载)
    @Autowired 与@Resource的区别(转)
    Spring 之jdbc模板(JdbcTemplate与NamedParameterJdbcTemplate)
    springMVC中的Controller里面定义全局变量
    spring批量更新数据 ---- BatchPreparedStatementSetter
    easyui树查找
    根据ID和parentID利用Java递归获取全路径名称
    一个统一将数据转换为JSON的方法
    上传图片并限制图片格式和大小
    js上传文件(图片)的格式和大小限制
  • 原文地址:https://www.cnblogs.com/yiweiyihang/p/7144065.html
Copyright © 2011-2022 走看看