Используя троичные, чтобы найти полное название месяца (PHP) - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь изменить значение, используя эту технику в php, но это не сработало! К сожалению, я также не знаю название этой техники. Так что ограничение для меня, чтобы найти решение в Google.

echo $session_slct->f("theMonth") == '01' ? "January" ||
     $session_slct->f("theMonth") == '02' ?  "February" ||
     $session_slct->f("theMonth") == '03' ?  "March" || 
     $session_slct->f("theMonth") == '04' ?  "April" || 
     $session_slct->f("theMonth") == '05' ?  "May" || 
     $session_slct->f("theMonth") == '06' ?  "June" || 
     $session_slct->f("theMonth") == '07' ?  "July" || 
     $session_slct->f("theMonth") == '08' ?  "August" || 
     $session_slct->f("theMonth") == '09' ?  "September" || 
     $session_slct->f("theMonth") == '10' ?  "October" || 
     $session_slct->f("theMonth") == '11' ?  "November" || 
     $session_slct->f("theMonth") == '12' ?  "December"  : "Invalid Month!";

Ответы [ 5 ]

5 голосов
/ 25 августа 2011

Зачем вам нужны тройники или карты массивов, когда у вас есть дата :

echo date('F', strtotime($month.'/1/2010'));

Но если вы настаиваете на использовании троичных, проверьте PHP.net на правильный синтаксис .Это должно быть:

echo $month == '01' ? 'January' :
     $month == '02' ? 'February' :
     //etc

По сути, || - это оператор ИЛИ, а не двоеточие, которое необходимо указать для троичной альтернативы.

5 голосов
/ 25 августа 2011

Я думаю, вы хотели:

// $month_num is in separate variable in case $session_slct->f("theMonth") is i.e. slow operation or using external resource
$month_num = $session_slct->f("theMonth");
echo ($month_num == '01') ? "January" :
     ($month_num == '02') ?  "February" :
     ($month_num == '03') ?  "March" :
     ($month_num == '04') ?  "April" :
     ($month_num == '05') ?  "May" :
     ($month_num == '06') ?  "June" :
     ($month_num == '07') ?  "July" :
     ($month_num == '08') ?  "August" :
     ($month_num == '09') ?  "September" :
     ($month_num == '10') ?  "October" :
     ($month_num == '11') ?  "November" :
     ($month_num == '12') ?  "December"  : "Invalid Month!";

или даже:

switch ($session_slct->f("theMonth")) {
    case '01': $month = "January"; break;
    case '02': $month = "February"; break;
    case '03': $month = "March"; break;
    case '04': $month = "April"; break;
    case '05': $month = "May"; break;
    case '06': $month = "June"; break;
    case '07': $month = "July"; break;
    case '08': $month = "August"; break;
    case '09': $month = "September"; break;
    case '10': $month = "October"; break;
    case '11': $month = "November"; break;
    case '12': $month = "December"; break;
    default: $month = "Invalid Month!";
}

echo $month;

, но на самом деле это не DRY варианты, вы можете использовать решения PhpMyCoder и efritz;)

3 голосов
/ 25 августа 2011

Ответ Xaerxees является правильным, но лучше будет следующим:

$months = array(
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December',
);

if (isset($months[$session_slct->f("theMonth") - 1])) {
    echo $months[$session_slct->f("theMonth") - 1];
} else {
    echo "Invalid Month";
}

Или, если хотите, вы всегда можете проиндексировать их следующим образом и выбросить - 1 материал:

$months = array(
    '01' => 'January',
    '02' => 'February',
    '03' => 'March',
    // etc
3 голосов
/ 25 августа 2011

То, что вы делаете, называется троичной операцией .Типичная настройка:

$variable = ($someValue == "abc") ? "yes" : "no";

Я не уверен, почему вы используете трубы вместо двоеточия.Сделай так:

echo $session_slct->f("theMonth") == '01' ? "January" :
     $session_slct->f("theMonth") == '02' ?  "February" :
     $session_slct->f("theMonth") == '03' ?  "March" :
     $session_slct->f("theMonth") == '04' ?  "April" :
     $session_slct->f("theMonth") == '05' ?  "May" :
     $session_slct->f("theMonth") == '06' ?  "June" :
     $session_slct->f("theMonth") == '07' ?  "July" :
     $session_slct->f("theMonth") == '08' ?  "August" :
     $session_slct->f("theMonth") == '09' ?  "September" :
     $session_slct->f("theMonth") == '10' ?  "October" :
     $session_slct->f("theMonth") == '11' ?  "November" :
     $session_slct->f("theMonth") == '12' ?  "December"  :
     "Invalid Month!";
1 голос
/ 25 августа 2011

Вы пытаетесь использовать троичный оператор, но вместо :.

вы используете ||.
$session_slct->f("theMonth") == '01' ?'January':
$session_slct->f("theMonth") == '02' /* ... 

Но вам лучше использовать переключатель ... чехол.

$month = 'Invalid Month!';
switch( $session_slct->f("theMonth") )
{
   case '01':
      $month = 'January';
      break;
   case '02':
      $month = 'February';
      break;
   /* ... */
}

Проблема использования троичной системы таким, какой вы есть, заключается в том, что вы звоните $session_slct->f двенадцать раз подряд. Это намного дороже, чем switch, который вызывает его один раз или, если вы настаиваете на троичном, по крайней мере, сначала кешируйте переменную:

$month = $session_slct->f("theMonth");
echo $month == '01' ?'January':
     $month == '02' ?'February':// yada yada yada/

Конечно, всегда есть решения, такие как:

echo date( 'F', strtotime( '01-' . $session_slct->f("theMonth") ) );
...