2013-09-05 60 views

回答

9

你會想在這裏使用預增量。

$x = ($x==2) ? 0 : ++$x; 

Demo!

+0

爲什麼$ x ++不起作用?我無法找到解釋...怎麼可能預先增量工作和後增量沒有? – greg

+0

@greg:'++ $ x'遞增該值,然後將其賦值給'$ x','$ x ++'首先賦值'$ x',然後*然後*遞增該值。 –

+0

感謝您的回答,但我仍然沒有得到它......在這兩種情況下,它執行兩個操作。因此,讓我們把$ x = 1的情況。它發現$ x == 2是錯誤的,因此: 執行$ x ++將分配$ x = 1然後遞增該值,所以$ x = 2 ...在最後我仍然應該有$ x = 2。 正在執行++ $ x會將該值增加到2,然後將其分配給$ x。所以再次,$ x = 2. 在下面的情況下,我會理解++ $ y和$ y ++之間的區別: $ x =($ x == 2)? 0:$ y ++ => $ x = 1和$ y = 2 $ x =($ x == 2)? 0:++ $ y => $ x = 2和$ y = 2 – greg

7

做的最好的方式,這將是:

$x = $x === 2 ? 0 : $x+1; 

如果你堅持使用三元只是增加了var:

$x += $x === 2 ? $x*(-1) : 1;//or hard-code -2 instead of $x*(-1) 

這要麼增加1到$x或增加$x*-1爲$ x($x + (-$x)爲0)。總的來說,我想補充一點,應儘可能避免使用三元(尤其是PHP)。在這種情況下,寫:

if (++$x === 3) 
{ 
    $x = 0; 
} 

是否完全一樣的東西,而不是太多的代碼,雖然它看起來要好很多。即便如此,在if語句的增量仍是凌亂的,最好事先增量,或者:

$x = $x === 2 ? -1 : $x; 
$x++; 

如果你已經有了一個ternaries一個奇怪的偏好...如果它是一個單眼線:

$x = ($x ===2 ? -1 : $x) +1; 

作品,太...但有一個爲這類事情一code-golfing site ...

+0

非常好,感謝您讓我瞭解代碼高爾夫網站! – user933791

-2

爲什麼不使用模塊運算符是什麼?

$x = ++$x % 2; 
+0

你想通過OP的代碼得到'$ x = ++ $ x%3',x可以是0,1或2 –

+0

實際上,如果'x'設法在其他地方設置爲3,那麼這個模數運算符會給出不同的結果。但這是由OP的實際需求決定的(可能是邏輯錯誤!) –