PHP 的数组操作

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);
?>

执行结果如下所示:
2121-11-1

3. 用asort()和rasort()对关联数组进行排序

例子 2:

<?php
$ble=array("tile"=>"php",
        "author"=>"王某",
        "year"=>2018,
);
sort ($ble);
print_r($ble);
?>

执行结果如下所示:
2021-11-1

sort()函数把关联数组组成一个索引数组,并用数值键取代原来的字符串键

在这种情况下,需要用到asort()和arsort()函数,它的作用与sort()和rsort()函数一样,但它们保留了每个元素的键与之之间的关系:
例子 3:

<?php
$ble=array("星期一","星期二","星期三","星期四","星期五");
asort($ble);
print_r($ble);
arsort($ble);
print_r($ble);
?>

执行结果如下所示:
2021-11-1

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);
?>

执行结果如下所示:
2021-11-1

提示: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";
?>

执行结果如下所示:
2021-11-1

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>

执行结果如下所示:
2021-11-1
上述例子中的 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>

执行结果如下所示:
2021-11-1

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);
?>

执行结果如下所示:
2021-11-1

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);
?>

执行结果如下所示:
2021-11-1

对于array_unshift()和array_push()两个函数,若要添加一个数组,它们会把该数组作为一个元素添加到原来的数组中,就可以把一个数组变成多维数组;
例子 8:

<?php
$ble=array("一","二","王五","三","李四");
$bbc=array("吴某","宋某");
echo array_push($ble,$bbc);
print "<pre>";
print_r ($ble);
print "</pre>";
?>

执行结果如下所示:
2021-11-1

array_pop()函数与array_shift()相对应,它可删除数组的最后一个元素,并返回这个元素的值;
使用函数时,只需要把数组作为参数传递给它即可:
例子 9:

<?php
$ble=array("一","二","王五","三","李四");
echo array_pop($ble);
print_r ($ble);
?>

执行结果如下所示:
2021-11-1

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;      //用echo输出最好

?>

上述代码比较冗余,使用list()函数 就能简短点;

<?php

$a=array("1","2","Li li","王三","谢一","Zhao li");
list($title,$author,$pubYear)=$a;
print_r($title);
var_dump($author);  
echo $pubYear;      //用echo输出最好

?>

注意: list() 函数只使用索引数组,函数总是假定元素从0开始并且是连续索引的(所以第一个元素的索引是0,第二个元素的索引是1,以此类推);
list()函数 的一个典型应用是与 each()函数一起使用;

2021-11-1

结束语

若这篇文章有帮到你,给个赞,收个藏,欢迎大家留言评论;
若文章有什么错误,欢迎大家指教。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值