对于简单文本,只有一行中的if-else语句

时间:2013-02-19 12:54:56

标签: php if-statement text ternary-operator

我想写一些文字Year: X | percentage: $percentage%,其中X基于$year中包含的值。

$year可以是20102011 ...还可以是0。在这种情况下,我们必须写出"All"这个词;否则,这一年本身。

Year: 2011 | percentage: 2%    // case $year not 0
Year: All | percentage: 2%     // case $year == 0

此代码似乎需要很长时间:

echo "year: ";
if ($year==0)
     echo "All";
else
     echo $year;

echo " | Percentage: $percentage%";

所以我想知道:我们怎样才能使这段代码变得更短更清晰?

注意我发布了自己的答案,因为我希望在花一些时间来分享我找到的方式。无论如何,我看到其他的看起来相当不错。

4 个答案:

答案 0 :(得分:3)

可以这样做:

echo "Year: ". ((0==$year) ? "All" : $year) ." | Percentage: $percentage%";

答案 1 :(得分:2)

可能不是你问题的直接答案,但恕我直言,你应该这样做:

$renderedYear = $year;
if ($year == 0) {
    $renderedYear = 'All';
}

echo 'Year: ' . $renderedYear . ' | Percentage: ' . $percentage . '%';

总是更喜欢可读性而不是代码短缺。屏幕上的像素比调试时间便宜。

也可以使用*printf

而不是连接

答案 2 :(得分:1)

我会使用sprintf()设置样式,因为它更容易阅读。

echo sprintf("year: %s | Percentage: %s %%", ($year == 0) ? "All" : $year, $percentage);

答案 3 :(得分:1)

我很抱歉,如果这不起作用(现在无法测试),但在C(有点类似于php)你可以直接否定数字,我相信你也可以使用:

echo "Year: ". (!$year ? "All" : $year) ." | Percentage: $percentage%";