PHP多维数组排序保持索引对应

2014 年 5 月 22 日3370

PHP多维数组排序保持索引对应

发布者:chinaitlab

 日期:

2014-05-11 05:53:12 浏览次数:0 (共有_条评论)

查看评论 | 我要评论

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

  uasort 函数

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

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

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

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

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

  复制代码

  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 */

  复制代码

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

  复制代码

  /**

  * 自定义排序函数

  * @param $param1

  * @param $param2

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

  */

  function my_sort($param1, $param2){

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

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

  }

  $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'),

  );

  uasort($arr, 'my_sort');

  var_dump($arr);

  /*输出值

  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)

  */

  复制代码

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

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

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

  复制代码

  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;

  }

  }

  $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();

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

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

  复制代码

  类似函数扩展

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

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

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

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

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

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

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

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

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

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

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

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

>>更多交流,请到ChinaUnix【Linux系统管理论坛】:http://http://www.zjjv.com///bbs/forum-2-1.html

关键词:

相关文章

网友评论

已有0位网友发表了看法

0 0