【发布时间】:2012-03-26 19:54:07
【问题描述】:
我有一个似乎无法解决的奇怪问题。我编写了相当复杂的代码,但我已经简化了它,问题仍然存在。
请参阅以下内容:
<?php
$meta = array('meta_title' => 'correct');
switch (true) {
case empty($meta['meta_description']):
$meta['meta_description'] = 'incorrect';
case empty($meta['meta_keywords']):
$meta['meta_keywords'] = 'incorrect';
case empty($meta['meta_title']):
$meta['meta_title'] = 'incorrect';
}
print_r($meta);
现在由于某种原因,他返回的 meta_title 是不正确的,尽管它已明确设置在数组中。就好像它忽略了这个案子,直接掉了下来。
我在 http://codepad.org/mQH9Kf1L 上设置了一个示例
提前致谢!
更新
看看我在哪里使用它可能更有意义。请参阅以下内容: http://codepad.org/WnxBp8Nt(从第 43 行开始)
只是出于兴趣,我改变了我添加了一个快速微计时器并测试了这个版本和一个用单独的 ifs 编写的版本。 if 版本出来的速度有点慢。
【问题讨论】:
-
+1 用于将您的代码简化为可用示例。
-
您忘记在每个案例结束时
break。 -
同意 Nanne - 人们没有意识到这有多重要 :)
-
尽管人们的评论可能是对的,但您可以通过各种方式进行评论,这让我很感兴趣。为什么这不起作用?如果您删除其他 2 种情况,
true == empty(blah)确实可以按预期工作,但是当其他人空着时,它不会.. 困扰我 ;) -
正是我的想法。我实际上是用另一种方式写的,但只是在试图获得更短的代码。有趣的是,如果您将 meta_description 和 meta_keywords 添加到数组中,它们都不会触发。
标签: php arrays switch-statement