好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一些php数组排序函数示例总结 - php数组

一些php数组排序函数示例总结

在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。

回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案,为了记住它们,我决定来一个数组排序函数大总结。

首先接触的就是PHP数组排序、降序的排序问题。

sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。 

rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。

asort:对数组进行排序并保持索引关系 

arsort:对数组进行逆向排序并保持索引关系

ksort:对数组按照键名排序,保留键名到数据的关联 

krsort:对数组按照键名逆向排序,保留键名到数据的关联

natsort:对字母数字字符串进行排序并保持原有键/值的关联 

natcasesort:同natsort排序算法,但不区分大小写字母排序

PHP 数组排序(sort) 

数字索引数组排序:

函数:sort(array, [sort type]) 

说明:sort()函数按升序对指定数组(第一个参数)进行排序。 

sort函数第二参数作用为指定排序类型,是可选参数.

SORT_REGULAR: 默认值,不改变类型进行排序; 

SORT_NUMERIC: 把值作为数字进行排序;

SORT_STRING: 把值作为字符串进行排序;

如数组中有4和]37″,按数字排序,4小于]37″;按字符串排序,4大于]37″;

一、一维数组

假设有一个一维数组,如下:

$sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051"); 

print_r()输出的原始数组结果为:

Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort()函数:根据数组下标进行升序排列;

print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;

print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort()函数:根据数组的键名进行升序排列;

print_r()输出的数组结果为:

Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;

print_r()输出的数组结果为:

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort()函数:根据数组的键值进行升序排列;

print_r()输出的数组结果为:

Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;

print_r()输出的数组结果为:

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array()函数:反向当前的数组排列顺序;

print_r()输出的数组结果为:

Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);

print_r()输出的数组结果为(只是其中一种随机排列):

Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

二、二维数组

假设有一个二维数组,代码如下:

$person  =  array (    array ( "hiro" ,  "23" ,  "suzhou" ),    array ( "yoyo" ,  "25" ,  "shanghai" ),    array ( "janstar" ,  "28" ,  "xinjiang" )  );   //print_r()输出的原始数组结果为:   1   Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:

1.按每维的第一个元素升序排列,代码如下:

function  compare0( $x ,  $y ) {    if ( $x [0] ==  $t [0]) {     return  0;   }  elseif  ( $x [0] <  $y [0]) {     return  -1;   }  else  {     return  1;   }  }    usort( $person , compare0);  echo   "按第一个元素正向排序:" ;  print_r( $person );   //输出的结果如下:   1   按第一个元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

2.按每维的第三个元素升序排列,代码如下:

function  compare2( $x ,  $y ) {    if ( $x [2] ==  $t [2]) {     return  0;   }  elseif  ( $x [2] <  $y [2]) {     return  -1;   }  else  {     return  1;   }  }    usort( $person , compare2);  echo   "按第三个元素正向排序:" ;  print_r( $person );   输出的结果如下:     按第三个元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

3.按每维的第三个元素升序排列,代码如下:

function  reverse_compare2( $x ,  $y ) {    if ( $x [2] ==  $t [2]) {     return  0;   }  elseif  ( $x [2] <  $y [2]) {     return  1;  //改变后即可反向    }  else  {     return  -1;  //改变后即可反向    }  }    usort( $person , reverse_compare2);  echo   "按第三个元素反向排序:" ;  print_r( $person );   //输出的结果如下:1   //按第三个元素反向排序:   Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

呵呵,是不是代码多了点,记下了以后方便查阅啊!

例代码如下:

<?php  error_reporting (0);  /**   * @数字数组排序 可按从大到小或从小到大排序     */   function  sortArray( $array ,  $choice ) {       $values  =  array_values ( $array );  // 建立一个数字索引的数组        $ch  =  $choice ==0 ? min:max;  // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小        do  {           $val  =  $ch ( $values );  // 找出最大或最小值            $key  =  array_search ( $val , $values );  // 取得最大值的键名            $result [ $key ] =  $val ;  // 将最大值存入新数组           unset( $values [ $key ]);      }  while  ( count ( $values ) > 0);       return   $result ;  }  $array  =  array (100, 1000, 1, 10000);  //$array = sortArray($array, 0);   $array  = sortArray( $array , 1);  foreach ( $array   as   $a ) {       echo   "$a " ;  }  ?> 

查看更多关于一些php数组排序函数示例总结 - php数组的详细内容...

  阅读:35次