在SplHeap类的compare()函数中返回值

时间:2016-07-07 18:16:34

标签: php

“大家好” 在php手册的第一个注释中:splheap类有例子我无法理解splheap子类的compare()函数中的返回行

我无法理解的一行

return $values1[0] < $values2[0] ? -1 : 1;

示例:

To have a good idea what you can do with SplHeap, I created a little example script that will show the rankings of Belgian soccer
<?php
/**
* A class that extends SplHeap for showing rankings in the Belgian
* soccer tournament JupilerLeague
*/
class JupilerLeague extends SplHeap 
{
    /**
     * We modify the abstract method compare so we can sort our
     * rankings using the values of a given array
     */
    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;
    }
}

// Let's populate our heap here (data of 2009)
$heap = new JupilerLeague();
$heap->insert(array ('AA Gent' => 15));
$heap->insert(array ('Anderlecht' => 20));
$heap->insert(array ('Cercle Brugge' => 11));
$heap->insert(array ('Charleroi' => 12));
$heap->insert(array ('Club Brugge' => 21));
$heap->insert(array ('G. Beerschot' => 15));
$heap->insert(array ('Kortrijk' => 10));
$heap->insert(array ('KV Mechelen' => 18));
$heap->insert(array ('Lokeren' => 10));
$heap->insert(array ('Moeskroen' => 7));
$heap->insert(array ('Racing Genk' => 11));
$heap->insert(array ('Roeselare' => 6));
$heap->insert(array ('Standard' => 20));
$heap->insert(array ('STVV' => 17));
$heap->insert(array ('Westerlo' => 10));
$heap->insert(array ('Zulte Waregem' => 15));

你能帮我理解这一行吗?

2 个答案:

答案 0 :(得分:0)

这是ternary声明。这意味着:

if ($values1[0] < $values2[0]) {
    return -1;
} else {
    return 1;
}

三元运算符并非特定于SplHeap。它只是一个常用的PHP运算符。

答案 1 :(得分:0)

它是一个条件ternay运算符?(三元if)。

它是如何运作的?:

  

在计算机编程中,?:是三元运算符,是其中的一部分   几种编程中基本条件表达式的语法   语言。它通常被称为条件运算符,   内联if(iif)或三元if。

     

它最初来自CPL,其中e1 ? e2 : e3的等效语法   是e1 → e2, e3

     

尽管有许多三元运算符是可能的,但条件运算符   是如此常见,其他三元运营商如此罕见,即   条件运算符通常被称为三元运算符。

来源:Wikipedia

例如,使用您的代码:

return $values1[0] < $values2[0] ? -1 : 1;

它类似于:

if($values1[0] < $values2[0]){
     return -1;
}
else{
     return 1;
}

?用作then:用作else