在PHP中,我们可以用array来简单模拟队列的功能,array_push出列,array_pop入列,但是更高效的用法还是要使用SplQueue这个官方提供的队列类来做,记录一下简单的用法。
$queue = new SplQueue; // 注意队列的特点是先进先出(FIFO) // 入队 $queue->enqueue(1); // 此时队列中的节点为 1 $queue->enqueue(2); // 此时队列中的节点为 2 - 1 $queue->enqueue(3); // 此时队列中的节点为 3 - 2 - 1 // 队列节点的个数 $size = $queue->count(); // 得到最后入列元素的值 $top = $queue->top(); // 此时结果为3,队列节点不变 // 得到先入列元素的值 $bottom = $queue->bottom(); // 此时结果为1,队列节点不变 // 出队 $queue->dequeue(); // 此时队列中的节点为 3 - 2 $queue->dequeue(); // 此时队列中的节点为 3 $queue->dequeue(); // 此时队列中的节点为 空 // 判断队列是否为空 $result = $queue->isEmpty(); // 结果为true
我们注意到,SplQueue中还有push和pop方法,它们与enqueue和dequeue有什么区别呢?push和enqueue没有区别,但是pop等同于栈的pop(FILO),每次弹出最后压入队列的元素。而队列是先进先出(FIFO)的,所以每次弹出的都是剩下的节点中先入列节点。
$queue = new SplQueue; // 入队 $queue->push(1); // 此时队列中的节点为 1 $queue->push(2); // 此时队列中的节点为 2 - 1 $queue->push(3); // 此时队列中的节点为 3 - 2 - 1 // 出列 $queue->pop(); // 次数队列中的节点为 2 - 1 $queue->pop(); // 次数队列中的节点为 1 $queue->pop(); // 次数队列中的节点为 空 // 入列 $queue->enqueue(1); // 此时队列中的节点为 1 $queue->enqueue(2); // 此时队列中的节点为 2 - 1 $queue->enqueue(3); // 此时队列中的节点为 3 - 2 - 1 // 出列 $queue->dequeue(); // 此时队列中的节点为 3 - 2 $queue->dequeue(); // 此时队列中的节点为 3 $queue->dequeue(); // 此时队列中的节点为 空
以上是PHP队列的简单用法,下面是一些迭代器指针相关的操作
$queue = new SplQueue; // 将元素压入队列 $queue->enqueue(1); // 此时队列中的节点为 1 $queue->enqueue(2); // 此时队列中的节点为 2 - 1 $queue->enqueue(3); // 此时队列中的节点为 3 - 2 - 1 // 将迭代器指针退回到第一个节点(按入列顺序) $queue->rewind(); // 得到当前节点的值,如果直接使用,得到的结果是NULL,必须在rewind之后使用 $current = $queue->current(); // 当前节点的序号(按入列顺序,从0开始) $queue->key(); // 当前迭代器指向的节点是否为空 $valid = $queue->valid(); // 迭代器指向下一个节点(按入列顺序) $queue->next();
转自:https://www.jianshu.com/p/04de3b73c8c0
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn