PHP 数组学习排序全接触 |
本文标签:PHP,数组排序 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 ?> |