简单的字符串开关和外壳功能不起作用



我不知道为什么这不起作用,我知道这是因为一些简单的愚蠢错误。

你能帮帮我吗?

$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 = 'am';
echo strtoupper($p);

如果是用户输入,您只需要再添加一个检查

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

并且您正在调用不同的函数来格式化。你应该打电话给FormatPeriod,你正在打电话FormatDate

            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 />';

这段代码:)太糟糕了!

您不需要检查每个大小写,只需将字符串转换为大写即可。

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

最新更新