这个问题与我前段时间问过的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
。你能解释为什么baz
在 bar
之前去了吗?
答案 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上还有一篇博文,您可能会发现它很有用。