2016-03-30 27 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

三項演算子のロジックはあなたのif/else構造を短くする(condition) ? (true return value) : (false return value)ステートメントを使用するプロセスです。

だからあなたの場合にはif/elseはコード以下のようになります。それは-1を返します、その値を示すために、usort関数の場合にはhttp://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

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

詳細についてでalookを持っています$personA['age']の数値が$personB['age']の数値よりも小さい。詳細について は、PHPでのソート機能を提供usortでコールバックは3つの戻り値を持つ1

how does usort work?を見て、http://php.net/manual/en/function.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おそらく内部的に何らかの種類のクイックソートまたはマージソートを使用します。比較のたびに、2つの要素でコールバックを呼び出し、スワップする必要があるかどうかを判断します。

+0

そのための歓声は何を意味しますか? – user2678132

+0

素晴らしいです。どうもありがとう – user2678132

1

3進演算子はif elseの短い手です。

3進演算子は、コードをより短く、よりクリーンにします。三項演算子の

基本的な構文は次のとおりです。

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

ifelseも一つだけの文を持っている場合は、三項演算子を使用することができます。例えば

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

は、単に以下のように書くことができる

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

それは、本質的に、本当に便利です

$name = "Jack"; 

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

ELSE IF、単に速記だVS

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

私は条件が満たされていない場合に関数を呼び出すことができます。したがって、$ okがtrueの場合、この例ではpass関数else fail関数を実行します。

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