/** * Class Queue * * 參考地址:https://www.jianshu.com/p/ca1bb95ada76 */ class Queue { /** * 隊列list * * @var array */ protected $items = []; /** * 建立隊列元素 * * @param $element * @param $priority * @return array */ public function queueElement($element, $priority) { return [ 'element' => $element, 'priority' => $priority ]; } /** * 將數據加入隊列 * * @param $element * @param null $priority * @return array */ public function enqueue($element, $priority = NULL) { $queueElement = $this->queueElement($element, $priority); if ($this->isEmpty() || $priority === NULL) { array_push($this->items, $queueElement); } else { $add = false; foreach ($this->items as $key => $value) { if ( $priority < $value['priority'] ) { array_splice($this->items, $key, 0, [$queueElement]); $add = true; break; } } if (! $add) { array_push($this->items, $queueElement); } } return $queueElement; } /** * 隊列消費 * * @return mixed */ public function dequeue() { return array_shift($this->items); } /** * 隊列的第一個元素 * * @return mixed */ public function front() { return $this->items[0]; } /** * 隊列是否爲空 * * @return bool */ public function isEmpty() { return !!! count($this->items); } /** * 隊列items大小 * * @return int */ public function size() { return count($this->items); } } $queue = new Queue(); $queue->enqueue("abc", 10); $queue->enqueue("def", 5); $queue->enqueue("hig", 12); $queue->enqueue("ijk", 3); $size = $queue->size(); for ($i = 0; $i < $size; $i++) { $item = $queue->dequeue(); print_r($item); }