首页 > php教程 > php手册 > 正文

PHP 多维数组排序 保持索引对应关系 巧用 uasort

php中文网
发布: 2016-06-13 09:35:37
原创
943人浏览过

实际开发中,多多少少都会遇到数组的排序问题,除了常规的写简单的排序算法,PHP 还提供了内置数组排序函数,本次重点分享一下:uasort  使用用户自定义的比较函数对数组中的值进行排序并保持索引关联,可排序多维数组,本文重点讲解此函数。      

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

uasort 函数

 

立即学习PHP免费学习笔记(深入)”;

参数类型:bool uasort ( array &$array, callable $cmp_function)

 

立即学习PHP免费学习笔记(深入)”;

本函数对数组排序并保持索引和单元之间的关联。

 

立即学习PHP免费学习笔记(深入)”;

主要用于对那些单元顺序很重要的结合数组进行排序。比较函数是用户自定义的。

 

立即学习PHP免费学习笔记(深入)”;

成功时返回 TRUE, 或者在失败时返回 FALSE。

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

数组排序实例(非class中):

 

立即学习PHP免费学习笔记(深入)”;

复制代码

 1 /**

 2  * 自定义排序函数

 3  * @param $param1

 4  * @param $param2

 5  * @return 0(不移动) 1(正向调换顺序) -1(逆向调换顺序)

 6  */

 7 

 8 function my_sort($param1, $param2){

 9     if($param1 == $param2) return 0;

10     else return $param1 > $param2 ? 1 : -1;

11 }

12 

13 $arr = array(

14             'a'=>'20',

15             'b'=>'1',

16             'c'=>'10',

17             'd'=>'5',

18             'e'=>'21',

19             'f'=>'4',

20             'g'=>'3',

21         );

22 

23 uasort($arr, 'my_sort');

24 

25 var_dump($arr);

26 

27 /*输出值

28 array (size=7)

29   'b' => string '1' (length=1)

30   'g' => string '3' (length=1)

31   'f' => string '4' (length=1)

32   'd' => string '5' (length=1)

33   'c' => string '10' (length=2)

34   'a' => string '20' (length=2)

35   'e' => string '21' (length=2)

36 */

复制代码

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

多维数组排序实例(非class中):

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

复制代码

/**

 * 自定义排序函数

 * @param $param1

 * @param $param2

 * @return 0(不移动) 1(正向调换顺序) -1(逆向调换顺序)

 */

 

立即学习PHP免费学习笔记(深入)”;

function my_sort($param1, $param2){

    if($param1['value'] == $param2['value']) return 0;

    else return $param1['value'] > $param2['value'] ? 1 : -1;

}

 

立即学习PHP免费学习笔记(深入)”;

$arr = array(

            'a'=>array('key'=>'定义1', 'value'=>'20'),

            'b'=>array('key'=>'定义2', 'value'=>'1'),

            'c'=>array('key'=>'定义3', 'value'=>'10'),

            'd'=>array('key'=>'定义4', 'value'=>'5'),

            'e'=>array('key'=>'定义5', 'value'=>'21'),

            'f'=>array('key'=>'定义6', 'value'=>'4'),

            'g'=>array('key'=>'定义7', 'value'=>'3'),

        );

 

立即学习PHP免费学习笔记(深入)”;

uasort($arr, 'my_sort');

 

立即学习PHP免费学习笔记(深入)”;

var_dump($arr);

 

立即学习PHP免费学习笔记(深入)”;

/*输出值

array (size=7)

  'b' => 

    array (size=2)

      'key' => string '定义2' (length=7)

      'value' => string '1' (length=1)

  'g' => 

    array (size=2)

      'key' => string '定义7' (length=7)

      'value' => string '3' (length=1)

  'f' => 

    array (size=2)

      'key' => string '定义6' (length=7)

      'value' => string '4' (length=1)

  'd' => 

    array (size=2)

      'key' => string '定义4' (length=7)

      'value' => string '5' (length=1)

  'c' => 

    array (size=2)

      'key' => string '定义3' (length=7)

      'value' => string '10' (length=2)

  'a' => 

    array (size=2)

      'key' => string '定义1' (length=7)

      'value' => string '20' (length=2)

  'e' => 

    array (size=2)

      'key' => string '定义5' (length=7)

      'value' => string '21' (length=2)

*/

复制代码

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

class中排序,为了方便以二维数组为例:

 

立即学习PHP免费学习笔记(深入)”;

uasort($arr1, array($this, 'public_my_sort'));

 

立即学习PHP免费学习笔记(深入)”;

uasort($arr2, array('self', 'self_my_sort'));

 

立即学习PHP免费学习笔记(深入)”;

复制代码

class myClassSort{

    

    /**

     * 排序主方法

     * @param $arr1  self静态排序

     * @param $arr2  this排序

     * @return 排序后的数组

     */

    public function main($arr1 = array(), $arr2 = array()){

    

        uasort($arr1, array($this, 'public_my_sort'));

        

        uasort($arr2, array('self', 'self_my_sort'));

        

        return array('arr1'=>$arr1, 'arr2'=>$arr2);

    

    }

    

    /**

     * 自定义排序函数

     * @param $param1

     * @param $param2

     * @return 0(不移动) 1(正向调换顺序) -1(逆向调换顺序)

     */

    private static function self_my_sort($param1, $param2){

        if($param1['value'] == $param2['value']) return 0;

        else return $param1['value'] > $param2['value'] ? 1 : -1;

    }

    

    

    //同上

    public function public_my_sort($param1, $param2){

        if($param1['value'] == $param2['value']) return 0;

        else return $param1['value'] > $param2['value'] ? 1 : -1;

    }

    

}

 

立即学习PHP免费学习笔记(深入)”;

$arr = array(

            'a'=>array('key'=>'定义1', 'value'=>'20'),

            'b'=>array('key'=>'定义2', 'value'=>'1'),

            'c'=>array('key'=>'定义3', 'value'=>'10'),

            'd'=>array('key'=>'定义4', 'value'=>'5'),

            'e'=>array('key'=>'定义5', 'value'=>'21'),

            'f'=>array('key'=>'定义6', 'value'=>'4'),

            'g'=>array('key'=>'定义7', 'value'=>'3'),

        );

        

$myClassSort = new myClassSort();

 

立即学习PHP免费学习笔记(深入)”;

var_dump($myClassSort->main($arr, $arr));

 

立即学习PHP免费学习笔记(深入)”;

/*输出结果同以上实例*/

复制代码

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

类似函数扩展

 

立即学习PHP免费学习笔记(深入)”;

   array_multisort 对多个数组或多维数组进行排序,但是最终填入使用的还是具体一维数组

 

立即学习PHP免费学习笔记(深入)”;

   arsort  对一维数组进行逆向排序并保持索引关系,保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   asort  对一维数组进行正向排序并保持索引关系,保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   krsort  对数组按照键名逆向排序,保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   ksort  对数组按照键名正向排序,保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   natcasesort  用“自然排序”算法对一维数组进行不区分大小写字母的排序,可以用来排序数组内容中字母数字混合的情况,保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   natsort  用“自然排序”算法对一维数组排序,区分大小写字母,可以用来排序数组内容中字母数字混合的情况,保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   rsort  对一维数组逆向排序,不保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   sort  对一维数组正向排序,不保持索引对应关系

 

立即学习PHP免费学习笔记(深入)”;

   uasort  使用用户自定义的比较函数对数组中的值进行排序并保持索引关联,可排序多维数组,本文重点讲解此函数

 

立即学习PHP免费学习笔记(深入)”;

   uksort  使用用户自定义的比较函数对数组中的键名进行排序

 

立即学习PHP免费学习笔记(深入)”;

   usort  使用用户自定义的比较函数对数组中的值进行排序,不保持索引关联

 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号