好得很程序员自学网

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

PHP数组排序实例与函数

PHP数组排序实例与函数,PHP4函数手册 array里的算是看完咯,明天在看看最新的手册.

array_values($arr) array:返回数组所有元素,实例代码如下:

<?php  $arr  =  array ( "a" ,  "b" ,  "c" );  $arr  =  array_flip ( $arr );  //反转数组的下标和值现在的$arr = array(0, 1, 2);   $arr  =  array_values ( $arr );  //返回数组$arr中的所有元素   print_r( $arr );  //结果: array(0, 1, 2);   ?> 

array_walk($arr, $func, [$data]) bool

使用用户自定义的函数遍历所有的元素,返回true/false

注意: 此函数只处理数组的第一维

$func是一个函数名

默认会传入两个参数 第一个 $arr的值,第二个$arr的下标,一对一对的传,代码如下:

<?php  $arr  =  array ( 'a' ,  'b' ,  'c' );  array_walk ( $arr ,  'test' );  //这里第二个参数test就是函数名   function  test(& $val ,  $key )  //这里第一个参数加上引用, 那么修改$val就等于修改$arr中的元素   {  $val  =  'x_'  .  $val ;  //这里给他加一个前缀   }  print_r( $arr );  //输出结果 array('x_a', 'x_b', 'x_c');   //这里如果把$arr改成 $arr = array('a', 'b', 'c', array(1, 2, 3)); 打印结果将是 array('x_a', 'x_b', 'x_c', 'x_Array');   ?> 

现在传入第三那个参数$data,如果有传入第三个参数,那么第三个参数将传给第二个参数定义的函数当中的第三个参数,代码如下:

<?php  array_walk ( $arr ,  'test' ,  'x_' );  function  test(& $val ,  $key ,  $prefix )  {  $val  =  $prefix  .  $val ;  //其实这里的$prefix就是上面的x_   }  print_r( $arr );  //输出结果和上面一样 array('x_a', 'x_b', 'x_c');   ?> 

arsort($arr) bool

对数组$arr进行倒序排列并保留下标和值的关系,如果排序成功返回true 否则返回 false,此函数只处理数组的第一维,代码如下:

<?php  $arr  =  array ( 'a'  =>  'a' ,  'b'  =>  'b' ,  'c'  =>  'c' );  arsort( $arr );  print_r( $arr );  //打印结果: array('c' => 'c', 'b' => 'b', 'a' => 'a'); 如果有数字那么数字会在字符前面   ?> 

asort($arr) bool

对数组$arr进行正序排列也就是a-z这样排列,返回值和上面一样,此函数也保留下标和值的关系,代码如下:

<?php  $arr  =  array ( 'a'  =>  'a' ,  'b'  =>  'b' ,  'c'  =>  'c' );  asort( $arr );  print_r( $arr );  //结果没变, 就是原那数组   $arr  =  array ( 'c'  =>  'c' ,  'b'  =>  'b' ,  'a'  =>  'a' );  asort( $arr );  print_r( $arr );  //结果:array('a' => 'a', 'b' => 'b', 'c' => 'c');   ?> 

compact($varname, ...., $varname) array

接受n个$varname并将$varname当做下标$varname的值当做值创建一个数组$varname可以为数组,解释不清楚,看例子:

<?php  $a  =  "变量a" ;  $b  =  "变量b" ;  $arr  = compact( 'a' ,  'b' );  //这里传入 a b 分别为上面定义的变量名称   print_r( $arr );  //打印结果为 array('a' => '变量a', 'b' => '变量b');   //还可以把变量名称当做数组传入   $vars  =  array ( 'a' ,  'b' );  $arr  = compact( $vars );  print_r( $arr );  //结果和上面一样, 其实这个函数就是做extract的相反操作   ?> 

extract($arr, $type, $prefix) int

将数组$arr的下标当做变量名,值当做变量的值.

$arr 目标数组

$type 这个是遇过遇到相同下标使用什么方式处理, 值是PHP已经定义了的常量

EXTR_OVERWRITE 如果相同, 那么就覆盖前面的那个变量, 默认就是这个

EXTR_SKIP 如果相同, 不覆盖前面那个变量

EXTR_PREFIX_SAME 如果相同, 那么使用第三个参数$prefix加到变量名前

EXTR_PREFIX_ALL 把所有变量名称都加上$prefix当做前缀

注意在$type为EXTR_PREFIX_SAME或EXTR_PREFIX_ALL时才需要传入参数$prefix, 不然传了也没用,例子代码如下:

<?php  $arr  =  array ( 'a'  =>  '变量a' ,  'b'  =>  '变量b' );  extract( $arr , EXTR_OVERWRITE);  //如果有相同,那么覆盖   echo   $a ;  //输出结果将是 '变量a'   echo   $b ;  //结果: '变量b'   $arr  =  array ( 'a'  =>  '变量a' ,  'b'  =>  '变量b' ,  'a'  =>  '第二个变量a' );  //这里有两个元素下标都为a   extract( $arr );  echo   $a ;  //输出结果是: '第二个变量a' 很明显已经覆盖了 '变量a' 因为默认第二个参数是 EXTR_OVERWRITE   ?> 

count($arr) int

统计数组中的元素的数目,代码如下:

<?php  $arr  =  array ( 'a' ,  'b' );  echo   count ( $arr );  //很明显结果为2   ?> 

current($arr) mixed

返回数组中当前指针所指的元素,此函数别名 pos,代码如下:

<?php  $arr  =  array ( 'a' ,  'b' ,  'c' );  echo  current( $arr );  //结果为 'a'   echo  next( $arr );  //指针向下一个移动,所以现在指针所指的是b 输出结果当然为 'b'   echo  current( $arr );  //结果又是b 因为当前指针就在b这哦   echo   end ( $arr )  //指针移动到数组最后, 并返回结果, 所以结果为c   echo  prev( $arr );  //指针向上一个移动, 结果b   echo  key( $arr );  //返回指针所指元素的下标 因为上面指针到了b那么所有 结果为1 因为b的下标就是1   echo  reset( $arr );  //重置指针都数组开头 结果a   ?> 

each($arr) array

重数组$arr中返回一对 key/value也就是 下标/值,代码如下:

?<?php  $arr  =  array ( 'a'  => 1,  'b'  => 2,  'c'  => c);  $res  = each( $arr );  print_r( $res );  //结果为 array('0' => 'a', 'key' => 'a', 1 => 1, 'value' => 1)   //返回结果 0 和 key 都代表 下标 1 和 value 代表值   //没使用一次each数组内部指针就会向下移动一次, 如果已经是数组末端, 将返回false   $res  = each( $arr );  print_r( $res );  //结果就会变成 array('0' => 'b', 'key' => 'b', 1 => 2, 'value' => 2)   ?> 

list($val, .. , [$val]) void 无返回值

把数组中的值赋给一些变量$val,代码如下:

<?php  $arr  =  array ( '颜色' ,  '字母A' ,  '字母B' );  list( $color ,  $a ,  $b ) =  $arr ;  //注意这里list的参数$val 位置是和数组中的位置对应, 重左到右   echo   $color ;  //结果 '颜色'   echo   $a ;  //结果 '字母A'   list( $color , ,  $b ) =  $arr ;  //这样空一个   echo   $color ;  //结果 '颜色'   echo   $a ;  //结果 一样都没有, 因为就没给a赋值哦, 哪里也空出来咯   echo   $b ;  //结果 '字母B'   //list each 一起用   $arr  =  array ( '颜色' ,  '字母A' ,  '字母B' );  while (list( $key ,  $val ) = each( $arr )) {  echo   '下标:'  .  $key ;  echo   '----值:'  .  $val ;  echo   '<br>' ;  } //开源代码phpfensi测试数据   //输出结果为   //下标:0----值:颜色   //下标:1----值:字母A   //下标:2----值:字母B   ?> 

krsort($arr, [$type]) bool

对数组$arr按照其下标进行倒序排列,还有一个ksort();这个是按下标进行升序排列,$type 是排序方式,代码如下:

<?php  $arr  =  array ( 'a'  => 1,  'b'  => 2,  'c'  => 3);  krsort( $arr );  print_r( $arr );  //打印结果: array('c' => 3, 'b' => 2, 'a' => 1);   ?> 

range($go, $end, [$setup) array,这个有点不好解释,实例代码如下:

<?php  $arr  = range(1, 10);  print_r( $arr );  //结果array(1, 2, 3, 4, .., 10);   $arr  = range(1, 10, 2);  //这里指定第三个参数, 也就是步长   print_r( $arr );  //结果array(1, 3, 5, 7, 9);   $arr  = range( 'a' ,  'z' );  print_r( $arr );  //结果 array('a', 'b', 'c', ..., 'z');   ?> 

sort($arr);

将数组重a-z进行排序,代码如下:

<?php  $arr  =  array ( "lemon" , "orange" , "banana" , "apple" );  sort( $arr );  print_r( $arr );  //结果array('apple', 'banana', 'lemon', 'orange');   //还有个z-a进行排序的函数rsort   ?> 

shuffle($arr) bool

将数组$arr进行乱排序,也就是随机排序,代码如下:

<?php  $arr  = range(1, 10);  shuffle( $arr );  print_r( $arr );  //结果是什么我也不知道, 因为是随机的   ?> 

usort($arr, $func) bool

使用你自己定义的函数对$arr进行排序$func是自定义函数,代码如下:

$arr  =  array (1, 5, 8 ,2 ,0 ,3);  usort( $arr ,  'test' );  function  test( $a ,  $b ) {  return   $a  ==  $b  ? 0 :  $a  <  $b  ? 1 : -1;  }  print_r( $arr );  //打印结果 Array ( [0] => 8 [1] => 5 [2] => 3 [3] => 2 [4] => 1 [5] => 0 )  

这函数没弄懂,不知道参数$a,$b 代表的是什么,看手册也没看懂,如果这么简单的排序用ksort就行咯rsort,这样的函数还有两个 uksort,和uasort都没弄懂.

查看更多关于PHP数组排序实例与函数的详细内容...

  阅读:51次