2012-04-09 17 views
1

なぜこれが機能しないのか分かりません。私はそれが何かの単純な間違いのためだと知っています。簡単な文字列スイッチとケース関数が機能しない

私を助けてください。

$p = 'aM'; 

function FormatPeriod($p) { 
$periodFormated = 'null'; 
switch($p){ 
    case "am": $periodFormated = "AM"; break; 
    case "Am": $periodFormated = "AM"; break; 
    case "aM": $periodFormated = "AM"; break; 
    case "pm": $periodFormated = "PM"; break; 
    case "Pm": $periodFormated = "PM"; break; 
    case "pM": $periodFormated = "PM"; break; 
    default: $periodFormated = 'fail'; 
    } 
    return $periodFormated; 
} 

$periodFormated = FormatDate($p); 

悲しいことに、出力は "aM"です。

なぜ文字列が "AM"に変更されませんでしたか?

〜ありがとうございます。それはあなただけ

$p = strtolower($p); 
if ($p == 'am' || $p == 'pm') 
{ 
    $p = strtoupper($p); 
} 
else 
{ 
    echo 'fail'; 
} 

1つの以上のチェックを追加する必要があり、あなたは形式に別の関数を呼び出しているユーザーの入力である場合は、ちょうど必要

+0

このコードでは、タイプミスがあります。最初に修正して、推測する必要はありません。 – Jon

+1

'FormatDate == FormatPeriod'ですか? – alex

+0

'致命的なエラー:未定義の関数FormatDate()を呼び出します。エラー報告を完全に無効にしましたか? –

答えて

1

$p = 'am'; 
echo strtoupper($p); 

です。あなたはFormatPeriodと呼ぶべきです。FormatDate

+0

私のコードはユーザ入力シナリオ用です。 $ p = 'xq'の場合はどうなりますか?私はそれが「失敗」になりたい。 –

+0

FormatDateが問題でした。私はあまりにも長い間私のコードを見てきたが、何度も読んでもそれを見ることができなかった。ありがとうございました。 –

+0

@RickRyan:私はすでに私の最初の答えで見つけた –

0

このコードはひどいです:)!

各ケースを確認する必要はありません。文字列を大文字に変換するだけです。

$p = 'aM'; 

function FormatPeriod($p) { 
    $periodFormated = strtoupper($p) ; 
    return $periodFormated; 
} 

$periodFormated = FormatPeriod($p); 
0
  function FormatPeriod($p) { 
      $periodFormated = strtoupper(trim($p)); //trim extra spaces and convert to uppercase 
      if($periodFormated!='AM' && $periodFormated!='PM') //check if it is not AM or PM 
       return 'fail'; //then return 'fail' 
      else 
       return $periodFormated; //otherwise return AM or PM 
      } 

      //Testing 
      echo FormatPeriod('am') . '<br />'; 
      echo FormatPeriod('Am') . '<br />'; 
      echo FormatPeriod('aM') . '<br />'; 
      echo FormatPeriod(' am ') . '<br />'; 
      echo FormatPeriod('a am') . '<br />'; 
関連する問題