7.7 向数组中添加和删除元素
数组创建完成后,用户还可以继续添加和删除元素,从而满足实际工作的需要。
7.7.1 向数组中添加元素
数组是数组元素的集合。如果向数组中添加元素,就像是往一个盒子里面放东西。这就牵扯到了“先进先出”或是“后进先出”的问题。
先进先出,有点像排队买火车票。先进到购买窗口区域的,购买完成之后从旁边的出口出去。
后进先出,有点像是给枪的弹夹上子弹,最后装上的那一颗子弹是要最先打出去的。
PHP对数组添加元素的处理使用push 、pop、shift和unshift函数来实现,可以实现先进先出,也可以实现后进先出。
下面的例子介绍在数组前面添加元素,以实现后进先出。
【例7.10】(实例文件:ch07\7.10.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>数组元素添加之后 进先出。</h2></HEAD> <BODY> <?php $clients = array('李丽丽','赵大勇','方芳芳'); array_unshift($clients, '王小明','刘小帅'); print_r($clients); ?> </BODY> </HTML>
运行结果如图7-11所示。
【案例分析】
(1)数组$clients原本拥有三个数组元素。array_unshift()向数组$clients的头部添加了数组元素'王小明'和'刘小帅'。最后通过print_r()输出,通过其数字索引可以知道添加元素的位置。
(2)array_unshift()函数的格式为:
array_unshift(目标数组,[预添加数组元素,预添加数组元素,…])
同样的例子介绍在数组后面添加元素,以实现先进先出。
【例7.11】(实例文件:ch07\7.11.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>数组元素添加之先 进先出。</h2></HEAD> <BODY> <?php $clients = array('李丽丽','赵大勇','方芳芳'); array_push($clients, '王小明','刘小帅'); print_r($clients); ?> </BODY> </HTML>
运行结果如图7-12所示。
【案例分析】
(1)数组$clients原本拥有三个数组元素。array_push()向数组$clients的尾部添加了数组元素'王小明'和'刘小帅'。最后通过print_r()输出,通过其数字索引可以知道添加元素的位置。
(2)array_push()函数的格式为:
array_push(目标数组,[预添加数组元素,预添加数组元素,…])
push的意思就是“推”的意思,这个过程就像是排队的时候把人从队伍后面向前推。
7.7.2 从数组中删除元素
从数组中删除元素是添加元素的逆过程。PHP使用array_shift()和array_pop()函数分别从数组的头部和尾部删除元素。
下面的例子介绍在数组前面删除第一个元素并返回元素值。
【例7.12】(实例文件:ch07\7.12.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>删除数组开头的第 一个元素。</h2></HEAD> <BODY> <?php $serivces = array('洗衣','订餐','导游','翻译'); $deletedserivces = array_shift($serivces); echo $deletedserivces."<br />"; print_r($serivces); ?> </BODY> </HTML>
运行结果如图7-13所示。
【案例分析】
(1)数组$serivces原本拥有4个数组元素。array_shift()从数组$serivces的头部删除了第一个数组元素,并且直接把所删除的元素值返回,且赋值给了变量$deletedserivces。最后通过echo输出$deletedserivces,以及用print_r()输出$serivces。
(2)array_ shift()函数仅仅删除目标数组的头一个数组元素。它的格式如下:
array_ shift(目标数组)
以上例子为数字索引数组,如果是带键值的联合索引数组,它的效果相同,返回所删除元素的元素值。
同样的例子介绍在数组后面删除最后一个元素并返回元素值。
【例7.13】(实例文件:ch07\7.13.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>删除数组结尾的最 后一个元素。</h2></HEAD> <BODY> <?php $serivces = array('s1'=>'洗衣','s2'=>'订餐','s3'=>'导游','s4'=>'翻译'); $deletedserivces = array_pop($serivces); echo $deletedserivces."<br />"; print_r($serivces); ?> </BODY> </HTML>
运行结果如图7-14所示。
【案例分析】
(1)数组$serivces原本拥有4个数组元素。array_pop()从数组$serivces的尾部删除了最后一个数组元素,并且直接把所删除的元素值返回,且赋值给了变量$deletedserivces。最后通过echo输出$deletedserivces,以及用print_r()输出$serivces。
(2)array_ pop()函数仅仅删除目标数组的最后一个数组元素。它的格式如下:
array_ pop(目标数组)
这个例子中的数组是一个联合数组。