PHP标准库(SPL)学习之SplPriorityQueue

发布于 2017-03-06 22:39:43 阅读 276

优先队列也是非常实用的一种数据结构,可以通过加权对值进行排序,由于排序在php内部实现,业务代码中将精简不少而且更高效。通过SplPriorityQueue::setExtractFlags(int  $flag)设置提取方式可以提取数据(等同最大堆)、优先级、和两者都提取的方式。

<?php
$queue = new SplPriorityQueue();

/**
 * $queue->insert(value, priority)
 * value 值
 * priority 优先级
 */

$queue->insert(1, '111');
$queue->insert(2, '22');
$queue->insert(3, '33');
$queue->insert(4, '44');
$queue->insert('a', 10);
$queue->insert('b', 1);
$queue->insert('c', 8);

/**
 * 设置元素出队模式
 * SplPriorityQueue::EXTR_DATA 仅提取值
 * SplPriorityQueue::EXTR_PRIORITY 仅提取优先级
 * SplPriorityQueue::EXTR_BOTH 提取数组包含值和优先级
 */
$queue->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY);

var_dump($queue->current()); //输出 4

$queue->setExtractFlags(SplPriorityQueue::EXTR_DATA);
var_dump($queue->current()); //输出 1

$queue->setExtractFlags(SplPriorityQueue::EXTR_BOTH);
var_dump($queue->current()); //输出 ['data' => 1, 'priority' => 111];

while ($queue->valid()){
    var_dump($queue->current());
    $queue->next();
}