1. 数组的排序
关于数组的排序,PHP语言提供了不少于12个与数组排序有关的函数; 比较常用的的是:
- sort()和rsort() —— 用于索引数组的排序;
- asort()和arsort() —— 用于关联的排序;
- ksort()和krsort() —— 根据关联数组的键而非值,进行排序;
- array_multisort() —— 一个非常有用的函数,可同时对多个数组或多维数组进行排序;
2. 用sort()和rsort()对索引数组进行排序
最简单的数组排序函数是sort()和rsort() ;sort()函数 可按升序对数组元素进行排序(对于字母,是按字母表顺序,对于数值,是按数值大小,并且字母排在数值之前),rosrt()函数 可按降序对数组元素的值进行排序; 这两个函数都需要一个数组名作为其参数;若排序成功,返回TRUE,否则返回FALSE; 例子 1:
<?php
$ble=array("酸菜鱼","剁椒鱼头","清汤鱼","鱼生");
sort($ble);
print_r($ble);
rsort($ble);
print_r($ble);
?>
执行结果如下所示:
3. 用asort()和rasort()对关联数组进行排序
例子 2:
<?php
$ble=array("tile"=>"php",
"author"=>"王某",
"year"=>2018,
);
sort ($ble);
print_r($ble);
?>
执行结果如下所示:
sort()函数 是把关联数组组成一个索引数组,并用数值键取代原来的字符串键;
在这种情况下,需要用到asort()和arsort()函数 ,它的作用与sort()和rsort()函数 一样,但它们保留了每个元素的键与之之间的关系: 例子 3:
<?php
$ble=array("星期一","星期二","星期三","星期四","星期五");
asort($ble);
print_r($ble);
arsort($ble);
print_r($ble);
?>
执行结果如下所示:
4. 用 ksort() 和 krsort() 函数对关联数组的键进行排序
ksort() 和 krsort() 函数 的作用与asort() 和 arsort() 函数 相似,分别按升序和降序对数组排序,它们都保留了键与值之间的关联性; 唯一的差别在于,asort()和arsort()函数 是根据元素的值进行排序的,而ksort()和krsort()函数 是根据元素的键进行排序的: 例子 4:
<?php
$ble=array("星期一","星期二","星期三","星期四","星期五");
ksort($ble);
print_r($ble);
krsort($ble);
print_r($ble);
?>
执行结果如下所示:
提示: 与asort()和arsort() 一样,ksort()和krsort()函数 主要应用于关联数组;
5. 用 array_multisort() 函数进行多重排序
用array_multisort()函数 ,可对多个相关函数进行排序,并保留他们之间的关系; 使用这个函数时,必须把需要排序的几个数组传递给它作为参数:
array_multsort($array1,$array2,...);
例子 5:
<?php
$ble=array("星期一","星期二","星期三","星期四","星期五");
$bbc=array("web前端开发技术","毛泽东思想概论","高等数字","PHP程序设计基础","近代史");
$nbc=array(2018,2019,2020,2021,2022,2023);
array_multisort($ble,$bbc,$nbc);
print_r($ble)."\r\n";
print_r($bbc)."\r\n";
print_r($nbc)."\r\n";
?>
执行结果如下所示:
用array_multisort() 函数 还能对多维数组进行排序,用法与多个数组的排序方法相同,唯一的差别就是该函数的参数只需要一个数组; 函数先对嵌套数组的第一个元素进行排序,然后对第二个元素进行排序,以此类推; 在排序的过程中,嵌套数组中元素的顺序保持不变; l例子:用 array_multisort()函数 对一个二维数组排序
<html>
<head>
<title> 用 multisort() 对二维数组排序</title>
</head>
<body>
<h3> 用 mulitsiort() 对二维数组排序</h3>
<?php
$bbl=array(
array(
"title"=>"Python",
"name"=>"王某",
"year"=>2019,
"age"=>23
),
array(
"title"=>"Java",
"name"=>"谢某某",
"year"=>2018,
"age"=>24
),
array(
"title"=>"JavaScript",
"name"=>"张某三",
"year"=>2008,
"age"=>20
),
array(
"title"=>"C#",
"name"=>"潘三",
"year"=>2013,
"age"=>26
),
);
array_multisort($bbl);
echo "<pre>";
print_r($bbl);
echo "</pre>";
?>
</body>
</html>
执行结果如下所示: 上述例子中的 array_multisort()函数 会根据书名顺序,若想根据name 的顺序输出,只要改变嵌套的关联数组中的元素即可,
<html>
<head>
<title> 用 multisort() 对二维数组排序</title>
</head>
<body>
<h3>按照人名进行输出</h3>
<?php
$bbl=array(
array(
"name"=>"王某",
"title"=>"Python",
"year"=>2019,
"age"=>23
),
array(
"name"=>"谢某某",
"title"=>"Java",
"year"=>2018,
"age"=>24
),
array(
"name"=>"张某三",
"title"=>"JavaScript",
"year"=>2008,
"age"=>20
),
array("name"=>"潘三",
"title"=>"C#",
"year"=>2013,
"age"=>26
),
);
array_multisort($bbl);
echo "<pre>";
print_r($bbl);
echo "</pre>";
?>
</body>
</html>
执行结果如下所示:
6. 添加或删除数组元素
用方括号 [] 可以给数组添加数组元素,
$ble[]="new value";
$bbc["newkey"]="new value";
PHP提供了五个关于数组操作的函数:
- array_unshift() —— 将一个或多个新元素添加到数组的首部;
- array_shift() —— 删除数组的第一个元素;
- array_push() —— 在数组的末尾添加一个或多个新元素;
- array_pop() —— 删除数组的最后一个元素
- array_splice —— 删除数组中从某个位置开始的元素,或者把新元素插入到数组中的某个值;
6.1 在数组的首位添加或删除元素
用array_unshift()函数 能把一个或多个元素插入到数组的首部; 只需把数组名和要插入的元素传递给它,它能够返回插入后的输入的元素传递给它,它就能返回插入后的数组的元素的个数, 例子 6:
<?php
$ble=array("一","二","王五","三","李四");
echo array_unshift($ble,"王某","谢某");
print_r($ble);
?>
执行结果如下所示:
用 array_shift() 函数可删除数组的第一个元素,并返回它的值(而不是它的键); array_shift() 函数只需要一个参数,即需要删除的元素的数组: 例子 7:
<?php
$ble=array("一","二","王五","三","李四");
echo array_shift($ble,"三");
print_r($ble);
?>
array_push() 能一次添加多个元素(它可告诉我们数组的新长度); 它的用法与array_unshift() 相似:需要传入数组名,并将需要添加的值作为参数; 例子 7:
<?php
$ble=array("一","二","王五","三","李四");
echo array_push($ble,"三");
print_r($ble);
?>
执行结果如下所示:
对于array_unshift()和array_push() 两个函数,若要添加一个数组,它们会把该数组作为一个元素添加到原来的数组中,就可以把一个数组变成多维数组; 例子 8:
<?php
$ble=array("一","二","王五","三","李四");
$bbc=array("吴某","宋某");
echo array_push($ble,$bbc);
print "<pre>";
print_r ($ble);
print "</pre>";
?>
执行结果如下所示:
array_pop()函数与array_shift() 相对应,它可删除数组的最后一个元素,并返回这个元素的值; 使用函数时,只需要把数组作为参数传递给它即可: 例子 9:
<?php
$ble=array("一","二","王五","三","李四");
echo array_pop($ble);
print_r ($ble);
?>
执行结果如下所示:
array_pop() 和 array_shift() 函数相对应,它能删除最后一个元素,并返回这个元素的值; 使用这个函数时,只需要把数组作为参数传递给它即可:
6.2 在数组的中间位置插入或删除元素
使用array_splice()函数 时,要传递给它三个参数,第一个参数要处理的数组,第二个参数要删除的元素(所有的数组,关联数组也有元素位置这个概念),第三个参数是可选的,表示需要删除的元素个数; 若省略了第三个参数,表示删除这个开始位置之后的全部元素; array_splice()函数 还有第四个可选参数,表示要插入的数组 最后,array_splice() 函数 会返回删除后(或插入后)的数组;
6.3 数组的合并
array_merge()函数 ,能合并数组,该函数需要一个或多个数组作为参数,返回合并后的数组,原数组不受影响; 注意: array_merge() 函数 会把两个元素合并在一起,生成一个新数组;这和 array_push()、array_unshift() 函数 和方括号 表示法不同,它们都是原封不动地插入参数数组,从而生成一个多维数组; 例子 10:
<?php
$a=array("张三,王某,李四");
$b=array("谢某,潘某");
array_push($a,$b);
print_r($a);
?>
array_merge()函数 有一个重要特性是,它保留了关键数组的键; 所以,经常通过它将新的键/值对插入到关联数组中, 例子11:
<?php:
$a=array("title"=>"python",
"author"=>"谢某",
"PubYera"=>2018);
$b=array_merge($a,array("numPags"=>256));
print_r($b);
?>
若用一个字符串添加一个键/值 时,数组中已经存在这个元素,那么原来的元素将会被覆盖; 所以,用 array_merge()函数 能方便地更新关联数组; 例子 12:
<?php
$a=array("title"=>"python",
"author"=>"谢某",
"PubYera"=>2018);
$b=array_merge($a,array("title"=>"PHP","王某"=>2019));
print_r($b);
?>
但是,数值相等的元素不会被覆盖,而是会在数组的末尾添加一个新的元素,并且给它分配一个新的索引 例子 13:
<?php
$a=array("title"=>"python",
"author"=>"谢某",
"PubYera"=>2018);
$b=array_merge($a,array(1=>"王五"));
print_r($b);
?>
因此,还能用 array_merge()函数 重新生成单个索引数组的索引值,只需要把这个数组传递给它就行;当我们想保证一个索引数组的全部元素使用索引号时,这个特性会非常有用; 例子 14:
<?php
$a=array(12=>"王五",23=>"李四",34=>"张二",56=>"谢一");
print_r(array_merge($a));
?>
6.4 数组与字符串之间的转换
PHP的 explode()函数 能把字符串转化成数组,implode()函数 能把数组转换成字符串; explode()函数 ,需要一个字符串作为参数,explode()函数 会根据特定的分隔符把字符串分解成多个字符块,再把分解后的字符块存放到一个数组中,再返回这个数组; 例子 15:
<?php
$a="1,2,Li li,王三";
print_r(explode(",",$a));
?>
若 explode()函数 设置了第三个参数,则能限制返回数组的元素个数; 例子 16:
<?php
$a="1,2,Li li,王三,谢一,Zhao li";
print_r(explode(",",$a,4));
?>
拓展: preg_split()和str_split() 函数 也能把字符串转换成数组,前者可根据正则表达式分解字符串,后者能把字符数组或一定长度的字符块数组;
implode() 函数 能把数组元素合并为一个长字符串,implode() 函数 需要两个参数:分隔字符和需要合并的字符串; 例子 17:
<?php
$a=array("1,2,Li li,王三,谢一,Zhao li");
print_r(implode(",",$a));
?>
6.5 把数组转换为变量列表
数组处理工具,list()函数 ,把数组的各个元素分散到各个变量中;
<?php
$a=array("1","2","Li li","王三","谢一","Zhao li");
$title=$a[0];
$author=$a[1];
$pubYear=$a[2];
print_r($title);
var_dump($author);
echo $pubYear;
?>
上述代码比较冗余,使用list()函数 就能简短点;
<?php
$a=array("1","2","Li li","王三","谢一","Zhao li");
list($title,$author,$pubYear)=$a;
print_r($title);
var_dump($author);
echo $pubYear;
?>
注意: list() 函数 只使用索引数组,函数总是假定元素从0开始并且是连续索引的(所以第一个元素的索引是0,第二个元素的索引是1,以此类推); list()函数 的一个典型应用是与 each()函数 一起使用;
结束语
若这篇文章有帮到你,给个赞,收个藏,欢迎大家留言评论; 若文章有什么错误,欢迎大家指教。
|