替代线颜色 - 理解提供的代码

时间:2011-02-09 17:27:59

标签: php html loops logic

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行吗?

5 个答案:

答案 0 :(得分:3)

是。

$c = !$c为自己指定$c的相反值。然后在赋值后评估变量。

这导致truefalse之间的值不断变化。

此代码利用foreach循环。如果你有一个正常的for循环,你可以使用计数器变量:

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

答案 1 :(得分:2)

如果您为变量指定了有意义的名称,并且您对空白区域很慷慨,那么代码通常更容易理解:

<?php

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

答案 2 :(得分:1)

在这里很短的空间里有一堆诡计。您可以将循环内部分成三行:

$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

答案 3 :(得分: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”。

答案 4 :(得分:1)

PHP中的赋值返回新分配的值。因此,当$c = !$ctrue时,$c会返回false; false$c时的true

{'3}}(?:)在“?”之前的条件评估'?'之前的条件是的,否则是':'之后的部分。因此它在':'之前或之后输出文本。

正如其他人所说,用更容易理解的方式写这个可能更好。