|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2011-01-10 22:23 UTC] weierophinney@php.net
Description:
------------
SplPriorityQueue does not behave as expected when data is registered with equal
priority. One would expect one of the following situations:
* The data retain the same order as how they were registered
* The data are ordered based on value
Neither of these are the case, however. From empirical analysis, it appears that
the following happens:
* The first item registered at that priority will always be the first returned
* The remaining items are returned in the reverse order in which they were
enqueued.
Test script:
---------------
$queue = new SplPriorityQueue();
$queue->insert('foo', 100);
$queue->insert('bar', 100);
$queue->insert('baz', 100);
$queue->insert('bat', 100);
foreach ($queue as $data) {
echo $data, "\n";
}
Expected result:
----------------
// IDEALLY order in which they are registered:
foo
bar
baz
bat
// OR following same rules as priority queue -- higher values == higher priority
foo
baz
bat
bar
Actual result:
--------------
foo
bat
baz
bar
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 00:00:01 2025 UTC |
Reproduced on OSX (PHP compiled from MacPorts): $ php --version PHP 5.3.5 (cli) (built: Jan 9 2011 20:15:19) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans $ cat test.php <?php $queue = new SplPriorityQueue(); $queue->insert('foo', 100); $queue->insert('bar', 100); $queue->insert('baz', 100); $queue->insert('bat', 100); foreach ($queue as $data) { echo $data, "\n"; } $ php test.php foo bat baz bar