为了更好地了解 SplHeap 的用途,我创建了一个小的示例脚本,它将显示比利时足球队在朱比勒联赛中的排名。
<?php
/**
* 扩展 SplHeap 类,用于显示比利时足球联赛 JupilerLeague 的排名
*/
class JupilerLeague extends SplHeap
{
/**
* 我们修改抽象方法 compare,以便可以使用给定数组的值对我们的排名进行排序
*/
public function compare($array1, $array2)
{
$values1 = array_values($array1);
$values2 = array_values($array2);
if ($values1[0] === $values2[0]) return 0;
return $values1[0] < $values2[0] ? -1 : 1;
}
}
// 让我们在这里填充堆 (2009 年的数据)
$heap = new JupilerLeague();
$heap->insert(array ('AA Gent' => 15));
$heap->insert(array ('安德莱赫特' => 20));
$heap->insert(array ('布鲁日足球俱乐部' => 11));
$heap->insert(array ('沙勒罗瓦' => 12));
$heap->insert(array ('布鲁日俱乐部' => 21));
$heap->insert(array ('比尔肖特' => 15));
$heap->insert(array ('科尔特赖克' => 10));
$heap->insert(array ('梅赫伦' => 18));
$heap->insert(array ('洛克伦' => 10));
$heap->insert(array ('莫斯科罗恩' => 7));
$heap->insert(array ('亨克' => 11));
$heap->insert(array ('鲁瑟拉尔' => 6));
$heap->insert(array ('标准列日' => 20));
$heap->insert(array ('圣特鲁伊登' => 17));
$heap->insert(array ('韦斯特洛' => 10));
$heap->insert(array ('瓦雷格姆' => 15));
// 为了显示排名,我们移动到第一个节点
$heap->top();
// 然后我们迭代每个节点以显示结果
while ($heap->valid()) {
list ($team, $score) = each ($heap->current());
echo $team . ': ' . $score . PHP_EOL;
$heap->next();
}
?>
这将产生以下输出
布鲁日俱乐部: 21
安德莱赫特: 20
标准列日: 20
梅赫伦: 18
圣特鲁伊登: 17
瓦雷格姆: 15
AA 根特: 15
比尔肖特: 15
沙勒罗瓦: 12
亨克: 11
布鲁日足球俱乐部: 11
科尔特赖克: 10
洛克伦: 10
韦斯特洛: 10
莫斯科罗恩: 7
鲁瑟拉尔: 6
希望这个例子为 SplHeap 的更复杂实现铺平了道路。