我想用PHP实现一个队列,看一下手册 ,我找到了这个例子:
$queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); print_r($queue);
这会创建数组:
array('apple', 'raspberry', 'orange', 'banana');
在这种情况下,'banana'位于队列的开头,可以使用它来检索array_pop()
.
我想这可能是传统方法,但有没有任何理由不反转数组中的数据如下?
$queue = array('apple', 'orange'); $queue[] = 'banana';//avoid function call array_push($queue, 'strawberry', 'grape');//add multiple items $next = array_shift($queue);
也许它是微不足道的,但是通过这种方式,你可以在添加单个元素时避免函数调用.有没有其他正当理由不这样做?
编辑:
看来我的问题有点难以理解,所以为了更容易看到我的方法确实根据FIFO原理实现了一个队列,我编写了这个代码以与PHP手册中的示例相对应,产生了确切的结果.相同的数组(反向顺序除外):
$queue = array('banana', 'orange'); $queue[] = 'rasberry'; $queue[] = 'apple';
这会创建数组:
array('banana', 'orange', 'rasberry', 'apple');
这是完全相同的数据,但顺序相反,所以要使用以下方法检索下一个项目:
$next = array_shift($queue);//The value of $next is 'banana' as before.
正如答案已经指出的那样,这与大多数人可视化队列的方式不同.似乎可读性是主要问题.但是,我觉得编码更容易.对我来说,它实际上看起来更自然,因为方括号表示法[]
是我的数组元素在许多情况下进入的门口.因此,实现堆栈或队列确实不是关于我如何在心理上可视化我的数据的问题.这是一个问题,用什么函数来访问通过门的第一个或最后一个元素.对于一个队列,它是array_shift()
一个堆栈pop()
.