我想知道SplPriorityQueue
在优先级为string
或int
时的工作原理。快速举例:
$queue = new \SplPriorityQueue();
$queue->insert('b', 5);
$queue->insert('c', 5);
$queue->insert('d', 1);
$queue->insert('a', 10);
$queue->insert('1', 'a');
$queue->insert('2', 'b');
print_r($queue);
输出:
Array
(
[5] => a
[4] => b
[3] => c
[2] => d
[1] => 2
[0] => 1
)
问题:为什么首先列出int
优先级的项目(即b c d)?当优先级为string
(第1项)时,b
是否被视为大于a
?
答案 0 :(得分:2)
这由SplPriorityQueue::compare()
确定。文档说明了它的返回值:
比较结果,如果 priority1 更大,则为正整数 比 priority2 ,如果相等则为0,否则为负整数。
注意:强>
具有相同优先级的多个元素将以无特定顺序出列。
请注意,参数 priority1 和 priority2 被声明为mixed
,并且没有提到转换为int。
这意味着>
的通常规则适用(see comparison operator documentation):
(int)'a'
和(int)'b'
解析为0
,这就是为什么这些项目在所有数字之后都是最后的原因。
以下是您的示例的相关比较:
php > var_dump(1 > 'a');
bool(true)
php > var_dump(1 > 'b');
bool(true)
php > var_dump('b' > 'a');
bool(true)