一、关于堆和栈的观点及差异
这里参考上篇博客: 浅谈堆和栈的差异
通过这篇文章,我们可以知道广义的堆和栈到底是什么,但是详细在php中的利用呢
二、php中的堆栈
众所周知,PHP供应了一组函数可以用于push与pop(堆栈)还有shift与unshift(行列步队)来操作数组元素。
1、push与pop
这两个函数操作的是栈,遵照前辈后出的原则。就像是往木桶里面加东西一样。通过array_push进行入栈操作,array_pop进行出栈操作。前辈栈的部分在木桶的最下面。
(1)array_push()方法
array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。该函数即是多次调用 $array[] = $value。
(2)array_pop()方法
array_pop() 函数删除数组中的末了一个元素。
返回数组的末了一个值。如果数组是空的,或者非数组,将返回 NULL。
(3)实例:
<?php
$arr = array();
array_push($arr,'aaa'); //先入栈 aaa
array_push($arr,'bbb'); //后入栈 bbb
print_r($arr); //此时打印结果为:[0]=>aaa,[1]=>bbb
array_pop($arr); //进行出栈操作,前辈后出原则,则此时相称于bbb出栈了。
print_r($arr); //打印结果该当是[0]=>aaa?>
三、php实现的行列步队
1、什么是行列步队
首先该当明确,行列步队和普通的堆栈是不一样的,行列步队遵照的是“前辈先出”。堆栈只能在栈顶删除和插入。行列步队是每一个新插入的元素都是在行列步队的尾部插入,每一个要删除的元素都是位于行列步队的头部,当从行列步队的头部删除了一个元素后,其它行列步队中的元素就会向提高1位,在元素移动到队首时,就会接管出队的操作。
行列步队模型可以理解为排队用饭。先排队的人就先吃到饭。
2、行列步队的操作
php中利用array_push()来增加元素,利用array_shift()删除元素。
(1)array_shift()方法
array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。
如果键名是数字的,所有元素都会得到新的键名,从 0 开始,并以 1 递增
详细参考手册:http://www.w3school.com.cn/php/func_array_shift.asp
(2)实例:
<?php $arr = array(); array_push($arr,'aaa'); //行列步队中添加 aaa array_push($arr,'bbb'); // 行列步队中添加 bbb print_r($arr); //此时打印输出为 [0]=>aaa,[1]=>bbb array_shift($arr); //删除第一个元素,遵照前辈先出原则,删除的是aaa print_r($arr); //打印结果为 [0]=>bbb?>
(3)双端行列步队
还有一种行列步队比较分外,首尾两端都许可进行插入和删除的操作,这种行列步队可以称为双端行列步队,与标准的行列步队不同的便是多了队首的插入操作和队尾的删除操作。一样平常是通过php的数组函数:array_unshift()和array_shift()。
详细参考:PHP行列步队事理及基于行列步队的写文件案例
四、行列步队的用场
行列步队可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采纳行列步队来异步插入。其余,还可以将较慢的处理逻辑、有并发数量限定的处理逻辑,通过行列步队放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。