我想在 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()
。