ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3492|回复: 5

[细说PHP] 第9章PHP中的数组与数据结构--数组的相关处理函数(三)

[复制链接]
发表于 2013-8-5 15:12:43 | 显示全部楼层 |阅读模式
简单的排序函数

<?php
        $data = array( 5, 8, 1, 7, 2 ); //声明一个数组$data, 存放5个整数元素

        sort( $data );                            //使用sort()函数将数组$data中的元素值按照由小到大顺序进行排序
        print_r( $data );                          //输出:Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 7 [4] => 8 )

        rsort( $data );                            //使用rsort()函数将数组$data按照由大到小的顺序对元素的值进行排序
        print_r( $data );                          //输出:Array ( [0] => 8 [1] => 7 [2] => 5 [3] => 2 [4] => 1 )

回复

使用道具 举报

 楼主| 发表于 2013-8-5 15:24:44 | 显示全部楼层
根据键名对数组排序

<?php
        //声明一个键值混乱的数组
        $data = array( 5=>"five", 8=>"eight", 1=>"one", 7=>"seven", 2=>"two" );
       
        ksort( $data );     //使用ksort()函数按照键名对数组$data进行由小到大的排序
        print_r( $data );   //输出:Array ( [1] => one [2] => two [5] => five [7] => seven [8] => eight )

        krsort( $data );    //使用krsort()函数按照键名对数组$data进行由大到小的排序
        print_r( $data );   //输出:Array ( [8] => eight [7] => seven [5] => five [2] => two [1] => one )

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:26:56 | 显示全部楼层
根据元素的值对数据排序

<?php
        $data = array( "l"=>"Linux", "a"=>"Apache", "m"=>"MySQL", "p"=>"PHP" );
       
        asort( $data );            //使用asort()函数将数组$data按元素的值升序排序,并保留原有的键名和值
        print_r( $data );   //输出:Array ( [a] => Apache [l] => Linux [m] => MySQL [p] => PHP )

        arsort( $data );    //使用arsort()函数将数组$data按元素的值降序排序,并保留原有的键名和值
        print_r( $data );          //输出:Array ( [p] => PHP [m] => MySQL [l] => Linux [a] => Apache )
       
        rsort( $data );           //使用rsort()函数将数组$data按元素的值降序排序,但原始键名被忽略
        print_r($data);                  //输出:Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:27:56 | 显示全部楼层
根据“自然排序”法对数组排序

<?php
        $data = array( "file1.txt", "file11.txt", "File2.txt", "FILE12.txt", "file.txt" );
       
        natsort( $data );           //普通的“自然排序”
        print_r( $data );           //输出排序后的结果,数组中包括大小写,输出不是正确的排序结果

        natcasesort( $data );   //忽略大小写的“自然排序”
        print_r( $data );            //输出“自然排序”后的结果,正常结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:29:06 | 显示全部楼层
根据用户自定的规则对数组排序

<?php
        //声明一个数组,其中元素值的长度不相同
        $lamp = array( "Linux", "Apache", "MySQL", "PHP" );       

        //使用usort()函数传入用户自定义的回调函数进行数组排序
        usort( $lamp, "sortByLen" );                    
        print_r( $lamp );   

        /* 排序后输出:Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache ) */
       
        /**
                自定义的函数作为回调用函数提供给usort()函数使用,声明排序规则
                @param        mixed        $one                数组中前一个元素值
                @param        mixed        $two                数组中挨着的下一个元素值
        */
        function sortByLen( $one, $two ) {        
                //如果两个参数长度相等返回0,在数组中的位置不变
                if ( strlen( $one ) == strlen( $two ) )
                        return 0;
                else              
                        //第一个参数大于第二个参数返回大于0的数,否则返回小于0的数
                        return ( strlen( $one ) > strlen( $two ) ) ? 1 : -1;  
        }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:34:18 | 显示全部楼层
多维数组的排序

<?php
        //声明一个$data数组,模拟了一个行和列数组
        $data = array(                                
                          array("id" => 1, "soft" => "Linux", "rating" => 3),
                        array("id" => 2, "soft" => "Apache", "rating" => 1),
                        array("id" => 3, "soft" => "MySQL", "rating" => 4),
                        array("id" => 4, "soft" => "PHP", "rating" => 2),
                );
               
        //使用foreach遍历创建两个数组$soft和$rating,作为array_multisort的参数
        foreach( $data as $key => $value ) {
                $soft[$key] = $value["soft"];               //将$data中的每个数组元素中键值为soft的值形成数组$soft
                $rating[$key] = $value["rating"];            //将每个数组元素中键值为rating的值形成数组$rating
        }

        array_multisort( $rating, $soft, $data ); //使用array_multisort()函数传入三个数组进行排序
        print_r( $data );                                //输出排序后的二维数组
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 18:12 , Processed in 0.035880 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表