【问题标题】:Declare array and set values inside a switch在开关内声明数组并设置值
【发布时间】:2019-12-29 22:16:07
【问题描述】:

我在带有数组的开关上出错。 这是我的代码:

    $categorie = [];

    switch ($this->categoria) {
        case "S":
            $categorie = array("S");
            break;
        case "C":
            $categorie = array("C", "S");
            break;
        case "J":
            $categorie = array("J", "C", "S");
            break;
        case "R":
            $categorie = array("R", "J", "C", "S");
            break;
        case "EA":
            $categorie = array("EA", "R", "J", "C", "S");
            break;
        case "EB":
            $categorie = array("EB", "EA", "R", "J", "C", "S");
            break;
        default:
            $categorie = [];
    }

我在 Sentry 上有错误。这是错误:注意:未定义变量:类别

$this->categoria 的值总是在我的测试中设置;这里是哨兵的调试值:

{
  categoria: R
}

【问题讨论】:

  • 我在这些代码行中看不到任何错误,除了您的第一行 $categorie = []; 可能是不必要的。但这不会引发错误。
  • $this 表示您是 OOP,您确定错误消息的范围和您的 $categorie 用法吗?
  • 是的,我正在使用 OOP,我认为正确使用它。感谢您的建议@DirkJ.Faber,我将删除第一行。问题没有解决:(

标签: php arrays switch-statement


【解决方案1】:

我不是 100% 同意这一点,但我相信你的问题来自于不使用 implode。对于 switch 语句,您正在将字符数组与字符串进行比较。您可能需要做的是在比较每种情况时将您的数组组合成 switch 语句的字符串,如下所示:

$categoria = [];
$a = implode("",$categoria);
switch ($a) {
    case "S":
        $categoria = array("S");
        break;
    case "C":
        $categoria = array("C", "S");
        break;
    case "J":
        $categoria = array("J", "C", "S");
        break;
    case "R":
        $categoria = array("R", "J", "C", "S");
        break;
    case "EA":
        $categoria = array("EA", "R", "J", "C", "S");
        break;
    case "EB":
        $categoria = array("EB", "EA", "R", "J", "C", "S");
        break;
    default:
        $categoria = [];
}

*此外,根据您使用的编译器,在将 $this 用于 $categoria 时可能会出现错误,因为它不是静态数组。

【讨论】:

  • 嗨 @tyler-mc 感谢您的回答,但 $categorie 与 $this->categoria 不同,因此您的解决方案不适用。
【解决方案2】:

我运行你的代码。没有问题。只是我改变了这一行;

 switch ($this->categoria) {

switch ("S") {

您是否在页面的其他位置使用 categorie 变量?

【讨论】:

  • $this->categoria != categorie。代码没有问题。
  • 我的意思是,我没有那个变量,所以我给它一个值并且它起作用了。没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2011-06-29
  • 2016-12-09
  • 2021-09-28
相关资源
最近更新 更多