资讯专栏INFORMATION COLUMN

PHP实现数据队列

Airy / 1811人阅读

摘要:参考地址队列创建队列元素将数据加入队列队列消费队列的第一个元素队列是否为空队列大小

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31597.html

相关文章

  • 自己实现异步执行任务的队列(二)

    摘要:六队列具体实现三写执行队列的程序根据设计,执行队列的程序文件是,它的主要功能是把任务从队列表里取出来,并且在后台执行。八服务器部署一配置咱们执行队列的程序都写好了,这个程序怎么触发呢,当然就要用到的定时任务,每隔一定的时间,执行一次。 六、队列具体实现三:写执行队列的程序 根据设计,执行队列的程序文件是 do_queue.php , 它的主要功能是把任务从队列表里取出来,并且在后台执行...

    zr_hebo 评论0 收藏0
  • Redis 实现队列

    摘要:场景说明用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求抢购场景,先入先出的模式命令或往列表右侧推入数据客户端阻塞直到队列有 场景说明: 用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 高并发场景,当某个时刻请求瞬间增加时,可以把请...

    PascalXie 评论0 收藏0
  • Redis 实现队列

    摘要:场景说明用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求抢购场景,先入先出的模式命令或往列表右侧推入数据客户端阻塞直到队列有 场景说明: 用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 高并发场景,当某个时刻请求瞬间增加时,可以把请...

    lifesimple 评论0 收藏0
  • Redis 实现队列

    摘要:场景说明用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求抢购场景,先入先出的模式命令或往列表右侧推入数据客户端阻塞直到队列有 场景说明: 用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 高并发场景,当某个时刻请求瞬间增加时,可以把请...

    LoftySoul 评论0 收藏0
  • 实战PHP数据结构基础之队列

    摘要:环形队列为充分利用向量空间,克服假溢出现象的方法是将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。双端队列截止目前我们所实现的队列都是在队尾入队,队首出队的结构。 什么是队列 队列是另外一种遵循先进先出原则的线性数据结构。队列有两端可供操作,一端出队,一端入队。这个特点和栈不同,栈只有一端可以用来操作。入队总是在后端,出队在前端。 常见操作 enqueue -> 入队 d...

    cnio 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<