2013-02-19 65 views
0

我想写一些文本Year: X | percentage: $percentage%,其中X基于$year中包含的值。If-else语句仅用于简单文本的一行

$year可以是2010,2011 ......还可以是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%"; 

所以我想:我们如何才能使此代码更短,更清晰?

注意我发布了自己的答案,因为我想分享我花费一些时间在它上面找到的方式。无论如何,我看到还有其他的看起来很不错。

+1

我d使用括号并使其更长更容易阅读。下面的答案非常难以阅读。 – Jessedc 2013-02-19 12:56:01

+0

你应该在你的原始问题中发布你的'答案',并要求你采取其他方式来做你正在做的事情。你的答案是最不可读的。 – Jessedc 2013-02-19 13:08:34

回答

1

我很抱歉,如果这不工作(不能测试它现在),但在C(这有点类似PHP),您可以直接否定的数字,我相信的,你也可以使用:

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

它的工作,@ Kyborek!我认为这是一个很好的展现方式。其实也可以像'($ year?$ year:'All')',就像上面评论中暴露的人一样。 – fedorqui 2013-02-20 09:33:49

+0

你是对的,没有否定需要:) – Kyborek 2013-02-20 13:33:07

+0

我们可以元认为你的句子“没有否定==确定”! :) – fedorqui 2013-02-20 14:06:24

3

这是可以做到这样的:

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

我也有同样的答案... – Ravi 2013-02-19 12:57:28

+0

该死的近乎不可能读。抱歉。 – Jessedc 2013-02-19 13:00:18

+1

($ year?$ year:'All')会使它更短 – xCander 2013-02-19 13:17:10

1

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

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

我打算推荐相同的。但是,当你有'printf'作为目的时,请不要使用'echo sprintf'(另外,因为你评论了阅读的容易性,参数可能更易于在单独的行上理解 - 此外,'=== '而不是'==') – eis 2013-02-19 13:01:30

+0

用printf更新。 '==='的使用取决于OP。 – Jessedc 2013-02-19 13:05:20

+0

printf替换了echo + sprintf的组合,现在只替换了sprintf。 – eis 2013-02-19 13:08:16

2

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

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

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

总是喜欢在可读性的代码急促。屏幕上的像素比调试时间便宜。

而不是连接你可能想要使用*printf

+0

我在想同样的事情,但只要OP不需要复用$ year – Jessedc 2013-02-19 13:01:58

+0

@Jessedc更新 – PeeHaa 2013-02-19 13:02:41

+0

是的这是一个更好的解决方案。 – Jessedc 2013-02-19 13:03:15