PHP实现数据队列

0
/**
 * 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);
}

你可能感兴趣的

载入中...