yii2实现队列及队列原理
来源:互联网 发布:华夏免费版数据库 编辑:程序博客网 时间:2024/05/24 05:34
本文实例讲述了yii2实现的双向队列类及其用法,对于PHP数据结构与算法的学习有不错的参考价值。分享给大家供大家参考。具体分析如下:
deque(全名 double-ended queue)是一种具有队列和栈的性质的数据结构。双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。进行删除操作的端称为队头,进行插入操作的端称为队尾。队列,是按照先进先出或后进后出的原则组织数据。当队列中没有元素时,称为空队列。
Deque.php类文件代码如下:
<?php/** * 队列 - 缓存 */namespace backend\models;use yii;use yii\base\Model;class Deque extends Model{ /** * 队列内部数组 * @var array */ public $queueArr = array(); /** * 缓存名称 * @var string */ public $cacheName; /** * 初始化类 * @var string * @param array $cacheName */ function __construct($cacheName = NULL) { $this->cacheName = $cacheName; if(!empty($this->cacheName)){ if(!\Yii::$app->cache->exists($this->cacheName)) \Yii::$app->cache->add($this->cacheName, $this->queueArr); $this->queueArr = \Yii::$app->cache->get($this->cacheName); }else{ return false; } } /** * 重新载入 * @return array */ public function reloadCache() { if(\Yii::$app->cache->exists($this->cacheName)) $this->queueArr = \Yii::$app->cache->get($this->cacheName); else $this->queueArr = array(); } /** * 入队[尾部] * @param array $value */ public function addLast($value) { $this->reloadCache(); array_push($this->queueArr, $value); \Yii::$app->cache->set($this->cacheName, $this->queueArr); return \Yii::$app->cache->get($this->cacheName); } /** * 出队[尾部] * @return array */ public function removeLast() { $this->reloadCache(); array_pop($this->queueArr); \Yii::$app->cache->set($this->cacheName, $this->queueArr); return \Yii::$app->cache->get($this->cacheName); } /** * 入队[头部] * @param array $value */ public function addFirst($value) { $this->reloadCache(); array_unshift($this->queueArr, $value); \Yii::$app->cache->set($this->cacheName, $this->queueArr); return \Yii::$app->cache->get($this->cacheName); } /** * 出队[头部] * @return array */ public function removeFirst() { $this->reloadCache(); array_shift($this->queueArr); \Yii::$app->cache->set($this->cacheName, $this->queueArr); return \Yii::$app->cache->get($this->cacheName); } /** * 清空队列 */ public function empty() { $this->queueArr = array(); \Yii::$app->cache->delete($this->cacheName); } /** * 获取数量 * @return int */ public function getLength() { $this->reloadCache(); return count($this->queueArr); } /** * 获取列头 * @return array */ public function getFirst() { $this->reloadCache(); return reset($this->queueArr); } /** * 获取列尾 * @return array */ public function getLast() { $this->reloadCache(); return end($this->queueArr); }}
简单使用示例:
use backend\models\Deque;$deque = new Deque('deque_cache_example');do{ // 获取队列头部数据 $data = $deque->getFirst(); if(!empty($data)){ //销毁原列队头部数据 $deque->removeFirst(); }}while($count = $deque->getLength());
阅读全文
0 0
- yii2实现队列及队列原理
- PHP实现队列及队列原理
- PHP实现队列及队列原理
- PHP实现队列及队列原理
- PHP实现队列及队列原理
- PHP实现队列及队列原理
- PHP实现队列及队列原理
- PHP实现队列及队列原理
- (实用篇)PHP实现队列及队列原理
- 环形队列实现原理
- 环形队列实现原理
- 循环队列实现原理
- 队列及实现、循环队列实现
- 队列定义及实现、循环队列实现
- 队列及简单实现
- 【数据结构】堆栈、队列的原理及java实现
- 消息队列mq的原理及实现方法
- java并发编程学习: 阻塞队列 使用 及 实现原理
- POJ
- 百炼2774-木材加工-C语言-二分查找
- ESP8266使用小结
- redis--数据库
- 我python之旅--小白入门
- yii2实现队列及队列原理
- 关于文本插入字符导致后面的字符被覆盖的问题
- (2017多校训练第三场)HDU
- LeetCode--Valid Sudoku
- MyEclipse安装其他插件比如maven后svn不起作用
- SDUT-山峰
- kubernetes资源对象--secret和Service Account
- 学密码学一定得学程序(串)
- mysql免安装配置