从计算中得到错误的复数

时间:2011-12-05 09:36:22

标签: php

$n=21;
$p=$n%10==1 && $n%100!=11 ? 0 : $n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2;

为什么$ p = 2? 应该是$ p = 0! 这是一个错误还是我错过了什么?

我试图通过以下方式获取俄语的复数形式:http://www.gnu.org/s/hello/manual/gettext/Plural-forms.html

2 个答案:

答案 0 :(得分:3)

应该是这个:

$p=($n%10==1 && $n%100!=11) ? 0 : (($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20)) ? 1 : 2);

错误是缺少支撑

答案 1 :(得分:3)

你可以在这里看到:http://php.net/manual/en/language.operators.comparison.php“建议你避免”堆叠“三元表达式。当在一个语句中使用多个三元运算符时,PHP的行为是不明显的”。你可以看到,如果你把第一个的else部分包含在(和)中,你会得到另一个结果:

$p=$n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2);

也许您应该考虑将您的声明更改为“常规”if块,例如:

if ($n%10==1 && $n%100!=11) 
{
    $p =0 ;
} 
elseif ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20))
{
    $p = 1;
}
else 
{ 
    $p= 2;
}

这种方式更容易阅读