加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP 数组学习排序全接触

发布时间:2020-05-24 22:57:25 所属栏目:PHP 来源:互联网
导读:PHP4函数手册 array里的算是看完咯, 明天在看看最新的手册。。。。

array_values($arr) array
返回数组所有元素
<div class="codetitle"><a style="CURSOR: pointer" data="46609" class="copybut" id="copybut46609" onclick="doCopy('code46609')"> 代码如下:<div class="codebody" id="code46609">
<?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,2);
?>
array_walk($arr,$func,[$data]) bool
使用用户自定义的函数遍历所有的元素,返回true/false
注意:此函数只处理数组的第一维
$func是一个函数名
默认会传入两个参数 第一个 $arr的值, 第二个$arr的下标, 一对一对的传哦
<div class="codetitle"><a style="CURSOR: pointer" data="38323" class="copybut" id="copybut38323" onclick="doCopy('code38323')"> 代码如下:<div class="codebody" id="code38323"><?php
$arr = array('a','b','c');
arraywalk($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','c',array(1,2,3)); 打印结果将是 array('x_a','x_c','x_Array');
?>

现在传入第三那个参数$data,如果有传入第三个参数,那么第三个参数将传给第二个参数定义的函数当中的第三个参数
<div class="codetitle"><a style="CURSOR: pointer" data="16296" class="copybut" id="copybut16296" onclick="doCopy('code16296')"> 代码如下:<div class="codebody" id="code16296">
<?php
arraywalk($arr,'test','x');
function test(&$val,$key,$prefix)
{
$val = $prefix . $val; //其实这里的$prefix就是上面的x_
}
print_r($arr); //输出结果和上面一样 array('x_a','x_c');
?>
arsort($arr) bool
对数组$arr进行倒序排列并保留下标和值的关系,如果排序成功返回true 否则返回 false
此函数只处理数组的第一维
<div class="codetitle"><a style="CURSOR: pointer" data="55817" class="copybut" id="copybut55817" onclick="doCopy('code55817')"> 代码如下:<div class="codebody" id="code55817">
<?php
$arr = array('a' => 'a','b' => 'b','c' => 'c');
arsort($arr);
print_r($arr); //打印结果: array('c' => 'c','a' => 'a'); 如果有数字那么数字会在字符前面
?>

asort($arr) bool
对数组$arr进行正序排列也就是a-z这样排列, 返回值和上面一样
此函数也保留下标和值的关系
<div class="codetitle"><a style="CURSOR: pointer" data="37255" class="copybut" id="copybut37255" onclick="doCopy('code37255')"> 代码如下:<div class="codebody" id="code37255">
<?php
$arr = array('a' => 'a','c' => 'c');
asort($arr);
print_r($arr); //结果没变, 就是原那数组
$arr = array('c' => 'c','a' => 'a');
asort($arr);
print_r($arr); //结果:array('a' => 'a','c' => 'c');
?>

compact($varname,....,$varname) array
接受n个$varname并将$varname当做下标$varname的值当做值创建一个数组$varname可以为数组
解释不清楚, 看例子
<div class="codetitle"><a style="CURSOR: pointer" data="19501" class="copybut" id="copybut19501" onclick="doCopy('code19501')"> 代码如下:<div class="codebody" id="code19501">
<?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, 不然传了也没用。。。
例子
<div class="codetitle"><a style="CURSOR: pointer" data="46204" class="copybut" id="copybut46204" onclick="doCopy('code46204')"> 代码如下:<div class="codebody" id="code46204">
<?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
统计数组中的元素的数目
<div class="codetitle"><a style="CURSOR: pointer" data="66094" class="copybut" id="copybut66094" onclick="doCopy('code66094')"> 代码如下:<div class="codebody" id="code66094">
<?php
$arr = array('a','b');
echo count($arr); //很明显结果为2
?>

current($arr) mixed
返回数组中当前指针所指的元素,此函数别名 pos
<div class="codetitle"><a style="CURSOR: pointer" data="32982" class="copybut" id="copybut32982" onclick="doCopy('code32982')"> 代码如下:<div class="codebody" id="code32982">
<?php
$arr = array('a','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也就是 下标/值
<div class="codetitle"><a style="CURSOR: pointer" data="32318" class="copybut" id="copybut32318" onclick="doCopy('code32318')"> 代码如下:<div class="codebody" id="code32318"><?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
<div class="codetitle"><a style="CURSOR: pointer" data="7751" class="copybut" id="copybut7751" onclick="doCopy('code7751')"> 代码如下:<div class="codebody" id="code7751">
<?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('颜色','字母B');
while(list($key,$val) = each($arr)) {
echo '下标:' . $key;
echo '----值:' . $val;
echo '
';
}
//输出结果为
//下标:0----值:颜色
//下标:1----值:字母A
//下标:2----值:字母B
?>

krsort($arr,[$type]) bool
对数组$arr按照其下标进行倒序排列
还有一个ksort(); 这个是按下标进行升序排列
$type 是排序方式
<div class="codetitle"><a style="CURSOR: pointer" data="81453" class="copybut" id="copybut81453" onclick="doCopy('code81453')"> 代码如下:<div class="codebody" id="code81453"><?php
$arr = array('a' => 1,'c' => 3);
krsort($arr);
print_r($arr); //打印结果: array('c' => 3,'a' => 1);
?>

range($go,$end,[$setup) array
这个有点不好解释
<div class="codetitle"><a style="CURSOR: pointer" data="33791" class="copybut" id="copybut33791" onclick="doCopy('code33791')"> 代码如下:<div class="codebody" id="code33791">
<?php
$arr = range(1,10);
print_r($arr); //结果array(1,3,4,10);
$arr = range(1,10,2); //这里指定第三个参数, 也就是步长
print_r($arr); //结果array(1,5,7,9);
$arr = range('a','z');
print_r($arr); //结果 array('a',...,'z');
?>

sort($arr);
将数组重a-z进行排序
<div class="codetitle"><a style="CURSOR: pointer" data="76775" class="copybut" id="copybut76775" onclick="doCopy('code76775')"> 代码如下:<div class="codebody" id="code76775"><?php
$arr = array("lemon","orange","banana","apple");
sort($arr);
print_r($arr); //结果array('apple','banana','lemon','orange');
//还有个z-a进行排序的函数rsort
?>

shuffle($arr) bool
将数组$arr进行乱排序, 也就是随机排序
<div class="codetitle"><a style="CURSOR: pointer" data="938" class="copybut" id="copybut938" onclick="doCopy('code938')"> 代码如下:<div class="codebody" id="code938">
<?php
$arr = range(1,10);
shuffle($arr);
print_r($arr); //结果是什么我也不知道, 因为是随机的
?>

usort($arr,$func) bool
使用你自己定义的函数对$arr进行排序$func是自定义函数
<div class="codetitle"><a style="CURSOR: pointer" data="28450" class="copybut" id="copybut28450" onclick="doCopy('code28450')"> 代码如下:<div class="codebody" id="code28450">
<?php
$arr = array(1,8,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都没弄懂, 郁闷。。。
?>

总结一下
<div class="codetitle"><a style="CURSOR: pointer" data="92797" class="copybut" id="copybut92797" onclick="doCopy('code92797')"> 代码如下:<div class="codebody" id="code92797">
<?php
array_values() //返回数组中所有元素
array_walk() //使用自定义函数遍历数组都一个单元
arsort(); //保留数组下标于值的关系进行倒序排列
asort() //保留数组下标于值的关系进行正序排列
compact() //将变量导入到数组中, 以变量名为下标, 值为值
extract() //将数组导入到变量, 下标为变量名, 值为值
count() //统计数组有多少个元素
current() //当前指针所指元素
next() //指针向下移动
prev() //指针向上移动
end() //指针移动到数组末尾
reset() //指针移动到数组开头
key() //返回当前指针所指元素的下标
each() //返回一对 key/value
list() //将数组导入到变量中
krsort() //按照下标进行倒序排列
ksort() //按照下标进行升序排列
range() //创建数组
sort() //按值重小到大排列
rsort() //按值重大到些排列
shuffle() //随机排列
usort() //......无语这个函数, Google去咯
?>

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读