2013-09-05 2 views

ответ

9

Здесь вы должны использовать предварительный приращение.

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

Demo!

+0

Почему $ x ++ не работает? Я не могу найти объяснение ... Как может быть, что pre increment действительно работает, а приращение постов - нет? – greg

+0

@greg: '++ $ x' увеличивает значение, а затем присваивает его' $ x', '$ x ++' присваивает '$ x' first и * then * увеличивает значение. –

+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; 

Если вы настаиваете на использовании трехкомпонентной только для увеличения вар:

$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; 
} 

ли то же самое, и не что гораздо больше кода, хотя это выглядит намного лучше. Тем не менее, прирост в заявлении, если по-прежнему грязно, лучше прибавка заранее, или:

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

Если у вас есть странное предпочтение триад ... а если имеет быть одно- подкладка:

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

работы тоже ... но есть code-golfing site для такого рода вещей ...

+0

Отлично, спасибо за то, что сообщили мне о кодовом гольф-сайте! – user933791

-2

Почему бы не использовать оператор модуля для этого?

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

Вы хотите '$ x = ++ $ x% 3' по коду OP x может быть 0,1 или 2 –

+0

На самом деле, если' x' удается установить значение 3 в другом месте, этот оператор модуля даст другой результат. Но это зависит от того, что фактически хочет ОП (может быть ошибкой в ​​логике!) –

Смежные вопросы