2013-02-19 2 views
0

Я хочу написать текст Year: X | percentage: $percentage%, где X основан на значении, содержащемся в $year.Оператор if-else только в одной строке для простого текста

$year2010, 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

+0

Вы должны были разместить свой «ответ» в своем первоначальном вопросе и попросили другие способы делать то, что вы делали. Ваш ответ является наименее читаемым. – Jessedc

ответ

1

Я сожалею, если это не работает (тест косяк это прямо сейчас), но в C (который немного похож на PHP), вы можете свести на нет номера напрямую, я верю, вы также можете использовать:

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

Это сработало, @ Киборек! Я думаю, что это очень хороший способ показать это. На самом деле, также можно писать как '($ year?$ year: 'All') ', как кто-то выставил в комментарии выше. – fedorqui

+0

вы правы, не нужно никакого отрицания :) – Kyborek

+0

Мы можем подумать, что ваш приговор «не отрицание» ... ». :) – fedorqui

3

Это можно сделать так:

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

У меня тоже такой же ответ ... – Ravi

+0

Проклятье почти невозможно читать. Сожалею. – Jessedc

+1

($ year? $ Year: 'All') сделает его еще короче – xCander

1

Я бы стилизовать его, используя sprintf(), как это гораздо легче читать.

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

Я собирался рекомендовать то же самое. Однако не используйте 'echo sprintf', когда у вас есть' printf' для этой цели :) (также, поскольку вы прокомментировали легкость чтения, параметры могут быть проще поняты на отдельных строках - и далее, '=== 'вместо' == ') – eis

+0

Обновлено с помощью printf. Использование '===' соответствует OP. – Jessedc

+0

printf заменяет комбинацию echo + sprintf, теперь вы заменяете только sprintf. – eis

2

Может быть не прямой ответ на вас вопросы, но ИМХО, вы должны сделать что-то вроде:

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

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

Всегда предпочитают читаемость над краткость кода. Пиксели на экране waaaay дешевле, чем время отладки.

Также вместо конкатенирования вы можете использовать *printf.

+0

Я думал об одном и том же, но до тех пор, пока OP не нужно повторно использовать $ year – Jessedc

+0

@Jessedc updated – PeeHaa

+0

Да, это лучшее решение. – Jessedc

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