字符串混淆1)或者如果是cond。并且strtolower不降低

时间:2014-11-03 21:03:04

标签: php function if-statement

尝试将时间转换为 - 215 pm或2:15 am或其他任何类型的14:15或02:15字符串。 (我没有使用TIME格式,因为这样做很乏味。)

设法获得包含小时,分钟和上午/下午的数组输出(但仅在存在字符的情况下)。

我想允许错误的字符,所以我可以明确地发出错误信息,但是a)我无法进行“简单”的OR测试,而b)strtolower对我不起作用 - 我不知道知道原因。

$hour= $matches['h'];
$minute=$matches['m'];

if(!array_key_exists('ap', $matches)){$matches ['ap'] ="am";};
$ampm=$matches['ap'];
strtolower ($ampm);

  debug ($hour,"hr");
  debug ($minute,"min");
  debug ($ampm,"ampm");

if ($ampm=="am" or $ampm=="pm") {echo "fine";}; // ALWAYS TRUE

if ($ampm==="am" or $ampm==="pm") {echo "fine";}; // FAILS WITH UPPER CASE AM AND PM

if ($hour<12 and $ampm=="pm") {$hour = $hour+12;};
  debug ($hour,"hr");
  debug ($minute,"min");
  debug ($ampm,"ampm");

所以我不明白为什么简单的字符串测试$ampm=="am" or $ampm=="pm"总是正确的,但这只是学术性的。但我真的不明白为什么strtolower不会将“AM”改为“am”,因此我甚至无法使用===同余测试。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

代码中的简单错误。变化:

strtolower ($ampm);

要:

$ampm = strtolower ($ampm);

答案 1 :(得分:1)

执行此操作以替换变量:

$ampm = strtolower($ampm);

此外,$ ampm始终为真,因为条件为

&#34;如果是,则为真,如果是下午,则为真,&#34;

所以你想做的是:

if(isset($ampm) && $ampm === "am")
{
    //its am
} else if(isset($ampm) && $ampm === "pm")
{
    //its pm
} else
{
    //its neither
}