在PHP中,我可以在switch语句中获得case语句的总数吗?

时间:2009-04-27 21:46:35

标签: php count switch-statement case

有没有办法在switch语句中返回(case)实例的总数?像这样:

$id = $_GET['id'];

switch ($id) {
  case "item1" :
  $data = 'something1';
  break;

  case "item2" :
  $data = 'something2';
  break;
}

echo $data;

但其原因是它有多个带有这些switch语句的文件,但它们的数量因文件而异。理想情况下,我希望能够通过递增“id”来遍历这些switch语句。关于这是否可行的任何想法?

7 个答案:

答案 0 :(得分:7)

如果您只是根据其他值分配值,则可以使用array代替:

$idToData = array(
    'item1' => 'something1',
    'item2' => 'something2',
);
$data = 'default';
if (isset($_GET['id']) && array_key_exists($_GET['id'], $idToData)) {
    $data = $idToData[$_GET['id']];
}
echo $data;

数组的优势在于它可以是extended,并且可以使用count()计算项目数

答案 1 :(得分:1)

不是没有改变$ id的值并删除break语句..但是那种方法失败了。你需要知道有多少原因吗?

我只想看看你想要了解的文件

find -name '*php' | xargs grep 'case'

答案 2 :(得分:1)

啊 - 我想我知道你在追求什么。您可以做的是添加一个默认值:case终止循环,而不是尝试计数。 E.g。

for($id = 1; !$quit; $id++)
{
    switch("item" . $id) {
    case "item1":
         // Do something
         break;
    case "item<n>":
         // Do something else
         break;
    default:
         $quit = true;
    }
}

问题是:为什么不在没有循环和case语句的情况下完成所有这些...只需...将一个语句放在另一个语句之后?

答案 3 :(得分:1)

您可以使用token_get_all()执行您所要求的操作,但有可能这不是您实际问题的最佳解决方案

答案 4 :(得分:1)

实际上,您可以使用token_get_all()可靠地执行此操作。以下是将该函数用于find all the define() usages in a PHP file的示例。您将需要构建一个有限状态机(类似于链接的状态机)来查找switch语句,然后查找从属case语句。您可能想也可能不想确保正确处理嵌套的switch语句。

答案 5 :(得分:0)

好的,我们假设网址如下:

somesite.com/ajax/getinfo.php?id=news

然后你可以获取$ _GET [id]值并用开关处理它。

如果我正确地想象你的代码:

$section=$_GET[id];
switch($section) {
case "1":
break;
.
.
.
default:

}

如果这不正确,请原谅我的英语。请再解释一下,它仍然有点含糊不清。

答案 6 :(得分:0)

实际上,这段代码可行:

$i = 0;
switch(something)
{
    case "item".$i++: //something
        break;
    case "item".$i++: //something
        break;
    default: //something
        break;
}