$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
答案 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;
}
这种方式更容易阅读