佇列是一種先進先出的線性表。只允許在前端(隊頭)刪除、在後端(隊尾)插入。先進入的資料在隊頭,後進入的在隊尾,取資料時從隊頭移出。無元素時稱為空佇列。
<?php
/**
* 佇列類別
* @author 創想編程 (TOPPHP.ORG)
* @license MIT
*/
class Queue {
private $queue = array();
private $size = 0;
public function __construct() {}
/** 入隊,支援鏈式呼叫 */
public function enqueue($data) {
$this->queue[$this->size++] = $data;
return $this;
}
/** 出隊,空佇列回傳 false */
public function dequeue() {
if (!$this->isEmpty()) {
--$this->size;
$front = array_splice($this->queue, 0, 1);
return $front[0];
}
return false;
}
public function getQueue() {
return $this->queue;
}
public function getFront() {
if (!$this->isEmpty()) {
return $this->queue[0];
}
return false;
}
public function getSize() {
return $this->size;
}
public function isEmpty() {
return 0 === $this->size;
}
}
?>
<?php
$queue = new Queue();
$queue->enqueue(1)->enqueue(2)->enqueue(3)->enqueue(4)->enqueue(5)->enqueue(6);
echo '<pre>', print_r($queue->getQueue(), true), '</pre>';
$queue->dequeue();
echo '<pre>', print_r($queue->getQueue(), true), '</pre>';
?>
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
)
PHP 陣列函式已提供佇列操作:
array_push($arr, $val) / array_unshift($arr, $val) — 入隊array_shift($arr) — 出隊若只需簡單佇列行為,直接使用陣列函式即可。注意 array_shift 會重新索引陣列,大量資料時效能較差;高效能場景建議使用 SplQueue(SPL 標準庫)。