2016-03-30 2 views
1

Я надеялся, что кто-то может объяснить мне, что? -1: 1; означает в нижнем тернарном операторе? Большое спасибопонимание тернарного оператора в php

<?php 
$people = array(
array("name" => "hank", "age" => 39), 
array("name" => "Sarah", "age" => 36), 
); 
usort($people, function($personA, $personB) { 
return ($personA["age"] < $personB["age"]) ? -1 : 1; 
}); 

print_r($people); 
+1

Правда и ложь моя первая догадка .. – Naruto

+1

Вы знаете название конструкции и функции, участвующие в этом коде и никогда не смотрели на то, что они имеют в виду или сделать? Подсказка: http://php.net – Pred

ответ

1

троичного оператор логика является процессом использования (condition) ? (true return value) : (false return value) заявления сократить свою if/else структуры.

Так что в вашем случае if/else будет как ниже код:

if($personA["age"] < $personB["age"]) { 
    return -1 ; 
} 
else{ 
    return 1; 
} 

более подробно то советую сначала: http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

В случае usort функции она возвращает значение -1, чтобы указать, что значение в $personA['age'] меньше, чем в $personB['age']. более подробно взглянуть на how does usort work? и http://php.net/manual/en/function.usort.php

Update 1

обратного вызова в usort предоставляется сортировочных функций в PHP есть три возвращаемые значения:

0: both elements are the same 
-1 (<0): the first element is smaller than the second 
1 (>0): the first element is greater 

Теперь usort вероятно использует своего рода quicksort или mergesort внутри. Для каждого сравнения он вызывает ваш обратный вызов с двумя элементами, а затем решает, нужно ли их менять или нет.

+0

приветствует это, но что означает -1? – user2678132

+0

блестящий. Большое спасибо – user2678132

1

Тернарный оператор - короткая рука для if else.

Тернарный оператор делает код короче и чище.

Основного синтаксиса для тройного оператора:

[assignment variable] = (condition) ? [if condition is true] : [if condition is false] 

Если if и else также имеет только один заявление, то вы можете использовать тройной оператор.

Например:

if (TRUE) { 
$a = 1; 
} 
else { 
$a = 0; 
} 

Может быть просто записать в виде:

$a = (TRUE) ? 1 : 0; 
0

Это просто сокращенная IF, ELSE, по существу, может быть очень удобно

$name = "Jack"; 

if($name == "Jack") 
    echo "You are Jack"; 
else 
    echo "You are not Jack"; 

VS

echo ($name == "Jack") ? "You are Jack" : "You are not Jack"; 

Я верю в php, вы можете вызывать функции, если условие/не выполнено, поэтому в этом примере, если $ ok является истинным, мы запускаем функцию fail функции else pass.

($ok) ? pass() : fail();