$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行吗?
答案 0 :(得分:3)
是。
$c = !$c
为自己指定$c
的相反值。然后在赋值后评估变量。
这导致true
和false
之间的值不断变化。
此代码利用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 = !$c
为true
时,$c
会返回false
; false
为$c
时的true
。
{'3}}(?:)在“?”之前的条件评估'?'之前的条件是的,否则是':'之后的部分。因此它在':'之前或之后输出文本。
正如其他人所说,用更容易理解的方式写这个可能更好。