3

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

$id = $_GET['id'];

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

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

echo $data;

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

4

7 回答 7

7

如果您只是根据另一个值分配值,则可以改用数组

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

数组的优点是可以扩展,可以统计项数count()

于 2009-04-27T21:54:11.250 回答
1

并非没有改变 $id 的值并删除 break 语句..但这有悖于目的。你有理由知道有多少吗?

我只会 grep 你想知道的文件

find -name '*php' | xargs grep 'case'
于 2009-04-27T21:50:46.407 回答
1

啊——我想我明白你在追求什么了。您可以做的是添加一个 default: case 来终止循环,而不是尝试计数。例如

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

问题是:为什么不只是通过......将一个语句一个接一个地放在没有循环和案例语句的情况下完成所有这些?

于 2009-04-27T21:59:02.643 回答
1

您可能可以使用token_get_all()做您所要求的事情,但很可能这并不是您实际问题的最佳解决方案。

于 2009-04-28T00:40:00.713 回答
1

实际上,您可以使用token_get_all()可靠地做到这一点。下面是使用该函数查找 PHP 文件中所有 define() 用法的示例。您将需要构建一个有限状态机(类似于链接状态机)来查找 switch 语句,然后查找从属 case 语句。您可能希望也可能不希望确保正确处理嵌套的 switch 语句。

于 2009-04-28T15:19:06.637 回答
0

好的,假设 URL 如下所示:

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

然后您可以获取 $_GET[id] 值并使用开关对其进行处理。

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

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

}

如果这不正确,请原谅我的英语。请多解释一下,它仍然有点模棱两可。

于 2009-04-28T15:09:13.337 回答
0

实际上,这段代码可以工作:

$i = 0;
switch(something)
{
    case "item".$i++: //something
        break;
    case "item".$i++: //something
        break;
    default: //something
        break;
}
于 2009-04-28T15:23:43.617 回答