【问题标题】:Foreach $_session[array] then using the result as a switch - case value [closed]Foreach $_session[array] 然后将结果用作开关 - 案例值 [关闭]
【发布时间】:2013-01-23 17:20:34
【问题描述】:

我有这个代码

<?php 
        session_start();

switch($sb) {

   foreach ($_SESSION['myarray'] as $result){

     case $result:
 echo "id"$result;
 break;
   }
 }
?>

这给了我以下错误,我不知道为什么:

解析错误:语法错误,意外的 T_FOREACH,在 foreach 行上需要 T_CASE 或 T_DEFAULT 或 '}'。

虽然这有效:

<?php

    foreach ($_SESSION['myarray'] as $result){
         echo "SB: ".$result.",<br>";
    }


 ?>

并输出为:

SB id: 1, SB id: 2, SB id: 3, SB id: 4, SB id: 10, SB id: 11, SB id: 12, SB id:13,

谁能看出哪里不对劲?谢谢。

【问题讨论】:

  • 你不能在一个开关里面有这样的foreach。它需要一个或多个case。查看手册php.net/manual/en/control-structures.switch.php
  • 建议你在 PHP 文档中查找 switch 语句的结构
  • 我认为你需要更清楚你想要做什么,因为你很可能会以错误的方式去做。根据下面的评论,您说您需要使用 url 中的 $sb 来运行基于 $_SESSION['myarray'] 中的 id 的查询。你能不能只测试使用$key=array_search($sb, $_SESSION['myarray']); if($key !== false){ echo "SB: ".$_SESSION['myarray'][$key]; }
  • 这对乔纳森有帮助,谢谢 :)

标签: php session foreach switch-statement case


【解决方案1】:

您不能将 foreach 直接放在 switch 语句中

查看文档here

开关应如下所示:

switch($val){
 case 1:
  //some code... you can put a foreach here
  break;
 case 2:
  //you could do this if you want:
  foreach ($myArray as $key => $value){
    //do some stuff!
  }
  break;
 default:
  //some code for a default case
  break;
}

另外,echo "id"$result; 会给你带来麻烦。那应该有它之间的连接运算符

【讨论】:

  • 谢谢。我知道案例应该是什么样子,这只是用于测试目的的代码。那么我可以在 switch 语句中放入任何类型的循环吗?我需要为 $session 中的每个 id 生成一个案例。
  • 如果您的案例是可预测的并且遵循某种模式,那么 switch 语句可能不是您的最佳选择。一个简单的 foreach 可能会做得更好。我只使用每个案例的代码完全不同的案例,然后我通常会编写一个处理该案例的函数以保持我的控制结构干净。
  • 案例因登录者而异。假设每个用户可能有大约 15 个不同的数字,介于 1-500 之间。 ?sb 用于此页面的链接,因此我需要单击的链接的 ID 以执行 SQL 语句。 Switch 是我认为这是可能的唯一方法 - 但如果我不能为可能性生成个别案例,那么它就行不通了。
【解决方案2】:

switch 语言结构被定义为它只能包含案例,而不是像 for-each 这样的任意代码块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多