有没有办法在switch语句中返回(case)实例的总数?像这样:
$id = $_GET['id'];
switch ($id) {
case "item1" :
$data = 'something1';
break;
case "item2" :
$data = 'something2';
break;
}
echo $data;
但其原因是它有多个带有这些switch语句的文件,但它们的数量因文件而异。理想情况下,我希望能够通过递增“id”来遍历这些switch语句。关于这是否可行的任何想法?
答案 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;
答案 1 :(得分:1)
不是没有改变$ id的值并删除break语句..但是那种方法失败了。你需要知道有多少原因吗?
我只想看看你想要了解的文件
find -name '*php' | xargs grep 'case'
答案 2 :(得分:1)
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;
}