2011-02-09 1 views
0

In an example like thisを提供:代替線の色コードを理解するには、

$c = true; // Let's not forget to initialize our variables, shall we? 
foreach($posts as $post) 
    echo '<div'.(($c = !$c)?' class="odd"':'').">$post</div>"; 

私はこれがどのように動作するかを理解したいと思います。

この例で何をしようとしていますか? trueをfalseに、falseをtrueに変更して、代替div行を実行しますか?

答えて

3

はい。

$c = !$cは、それ自身に反対の値$cを割り当てます。変数はの割り当て後にと評価されます。

この結果、値は常にtruefalseの間で変化します。

このコードは、foreachループを利用しています。

for($i = 0, $l = count($posts); $i < $l; $i++) { 
    echo '<div'.(($i % 2)?' class="odd"':'').">{$posts[$i]}</div>"; 
} 
1

策略はここに非常に短いスペースで起こっているの束があります:あなたは、通常のforループを持っている場合は、代わりにカウンタ変数を使用することができます。ループの内部を3つの行に分割することができます。

$c = !$c; // invert c 
$class_part = $c ? ' class="odd"':''; // if c is true, class is odd. 
echo "<div$class_part>$post</div>"; // print the <div> with or without the class 
            // depending on the iteration 
1

はい。

$c = true; 
$not_c = !$c; // $not_c is now false 
$c = !$c;  // same as above, but assigning the result to $c. So $c is now false 
$c = !$c;  // $c is now true again 

あなたが提供するスニペットはそうのように書き換えられた(と間違いなくより明確になる)ことができます:

$c = true; 
foreach ($posts as $post) { 
    $c = !$c; 
    echo '<div' . ($c ? ' class="odd"' : '') . ">$post</div>"; 
} 

$c ? ... : ...構文は三項演算子を使用しています。それは短い手のif文のようなものです。たとえば、true ? "a" : "b"は「a」と評価されます。

+0

真実の代わりに偽りがあったら? "a": "b"はbと評価されます。 (その時点で「a」が真であることを考慮して)。はい? – MEM

+1

はい、そうです。 –

2

あなたは、変数に意味のある名前を割り当てて、あなたはホワイトスペースで寛大であれば、コードを理解する方が簡単です:PHPで

<?php 

$odd = true; 
foreach($posts as $post){ 
    echo '<div' . ($odd ? ' class="odd"' : '') . ">$post</div>"; 
    $odd = !$odd; 
} 
+0

確かにはるかに明確です。そのアドオンに感謝します。 – MEM

1

割り当てが新たに割り当てられた値を返します。従って$c = !$cは、$cfalseのときtrueを返します。 $ctrueの場合はfalseです。

ternary operator(?:)は、 ':'の前の条件が '?'の前に評価されます。そうでなければ ':'の後の部分です。したがって、テキストは ':'の前後に出力されます。

他にも述べたように、もっと分かりやすい方法でこれを書いたほうがよいでしょう。

関連する問題