在边界情况下SplPriorityQueue的意外行为

时间:2013-04-16 21:04:07

标签: php spl

这个问题与我前段时间问过的this one有关。

基本上它是关于在一些边界情况下如何出列的。例如:

$queue = new SplPriorityQueue();

$queue->insert('foo', 0);
$queue->insert('bar', 0);
$queue->insert('baz', '0');

我期待完全相同的订单foo bar baz

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

原来是foo baz bar。你能解释为什么bazbar 之前去了吗?

1 个答案:

答案 0 :(得分:1)

如同foo,bar& baz都具有相同的优先级,他们的订单是未定义的,因此它们可以按任何顺序出现。请参阅此处的说明http://www.php.net/manual/en/splpriorityqueue.compare.php

  

注意:

     

具有相同优先级的多个元素将以无特定顺序出列。

以及建议解决方案http://www.php.net/manual/en/splpriorityqueue.compare.php#93999

在同一页面上的最高用户注释

Matthew Weier O'Phinney's Blog上还有一篇博文,您可能会发现它很有用。