PHP7高效的数据结构,可以作为array的替代
安装
扩展地址:https://pecl.php.net/package/ds
Composer安装地址:https://packagist.org/packages/php-ds/php-ds
使用composer安装可以不用开启扩展
Stack类(堆栈)
堆栈是“后进先出”或“LIFO”的集合,该集合仅允许访问结构顶部的值,并以破坏性的顺序按此顺序进行迭代。
创建堆栈
// 创建堆栈,初始值为$values,类型不限
$stack = new Ds\Stack($values);
// 复制堆栈的浅副本,更新副本不会影响原始版本
$stack->copy();
入栈\出栈
// 向堆栈顶部插入一个或多个数据$values
$stack->push(...$values);
// 获取堆栈顶部的值并删除
$stack->pop();
// 获取堆栈顶部的值但不删除
$queue->peek();
// 清空堆栈
$stack->clear();
// 判断堆栈是否为空
$stack->isEmpty();
统计堆栈数量
// 获取堆栈的值的数量
$stack->count();
转换堆栈
// 堆栈数据转换为数组,数据顺序相同
$stack->toArray();
// 堆栈数据转换为json,数据顺序相同
$stack->jsonSerialize();
堆栈内存
// 为堆栈所需的容量分配内存
// $capacity应当为其分配容量的值的数量如果此值小于或等于当前容量,容量将保持不变;容量将始终四舍五入到最接近的2的幂
$stack->allocate($capacity);
// 获取堆栈的内存
$stack->capacity();
Queue类(队列)
队列是“先进先出”或“ FIFO”集合,它仅允许访问队列前面的值并以破坏性的顺序按此顺序进行迭代
创建队列
// 创建队列,初始值为$values,类型不限
$queue = new Ds\Queue($values);
// 复制队列的浅副本,更新副本不会影响原始版本
$queue->copy();
入队列\出队列
// 向队列尾部插入一个或多个数据$values
$queue->push(...$values);
// 获取队列顶部的值并删除
$queue->pop();
// 获取队列顶部的值但不删除
$queue->peek();
// 清空队列
$queue->clear();
// 判断队列是否为空
$queue->isEmpty();
统计队列数量
// 获取队列的值的数量
$queue->count();
转换队列
// 队列数据转换为数组,数据顺序相同
$queue->toArray();
// 队列数据转换为json,数据顺序相同
$queue->jsonSerialize();
队列内存
// 为队列所需的容量分配内存
// $capacity应当为其分配容量的值的数量如果此值小于或等于当前容量,容量将保持不变;容量将始终四舍五入到最接近的2的幂
$queue->allocate($capacity);
// 获取队列的内存
$queue->capacity();
PriorityQueue类(优先级队列)
与Queue非常相似。值将以指定的优先级推送到队列中,而优先级最高的值将始终位于队列的最前面。使用最大堆实现。
对于具有相同优先级的值,将保留“先进先出”顺序。在PriorityQueue上进行迭代是破坏性的,等效于连续的弹出操作,直到队列为空
创建队列
// 创建队列,初始值为$values,类型不限
$queue= new Ds\PriorityQueue($values);
// 复制队列的浅副本,更新副本不会影响原始版本
$queue->copy();
入队列\出队列
// 向队列插入一个数据$values,优先级为$priority
$queue->push($values, $priority);
// 获取队列顶部的值并删除
$queue->pop();
// 获取队列顶部的值但不删除
$queue->peek();
// 清空队列
$queue->clear();
// 判断队列是否为空
$queue->isEmpty();
统计队列数量
// 获取队列的值的数量
$queue->count();
转换队列
// 队列数据转换为数组,数据顺序相同
$queue->toArray();
// 队列数据转换为json,数据顺序相同
$queue->jsonSerialize();
队列内存
// 为队列所需的容量分配内存,
// $capacity应当为其分配容量的值的数量如果此值小于或等于当前容量,容量将保持不变;容量将始终四舍五入到最接近的2的幂
$queue->allocate($capacity);
// 获取队列的内存
$queue->capacity();