【问题标题】:How to create a switch case dynamically from database in PHP?如何在 PHP 中从数据库动态创建 switch 案例?
【发布时间】:2020-02-26 10:49:44
【问题描述】:

我的问题是在 PHP 中创建它很简单:

switch ($var) {
    case 1:
        $foo = "test";
        break;
    case 2:
        $foo = "test1";
        break;
    case 3:
        $foo = "test2";
        break;
}

如何使用数据库数据动态创建它?

思路如下:

switch ($var) {
    while ($row = mysqli_fetch_assoc($result)) {
        case $row['mydata1'] :
            $foo = $row['mydata2'];
            break;
    }
}

这可能吗?

【问题讨论】:

  • 您可以动态构建.php 文件,然后执行该文件。本质上,您是在谈论编写生成代码的代码,该代码本身表达了预期的逻辑。您需要将这两个步骤分开。不过,这个想法似乎充满了潜在的问题,并且只应在您明确构建代码生成工具时使用,而不是仅在尝试比较值时使用。你为什么要这样做呢?为什么不将值与循环中的 if 语句进行比较?
  • 感谢您回答@David 我的代码中有一个开关,有 10 种可能的情况,使用开关似乎比使用 10 个 if 更理想。现在我必须在 5 个不同的地方做同样的事情,拥有一个包含所有内容的数据库并且在代码中为每个人提供相同的功能似乎更优化,如果不使用数据库中的数据,我必须放置 10 个案例在 5 个不同的站点进行切换。不知道我解释的好不好
  • 如果循环遍历,只有一个if。
  • @RubenAmezcua:您仍然可以使用数据库并循环遍历您的值,只需在if 条件下比较这些值,而不是像这样尝试构建switch。听起来您混淆了两个不同的问题,一个是尝试使用动态值,另一个是尝试使用switch。解决前一个问题,后者无关紧要。
  • @David 我的想法是使用开关,但我会尝试 if,最后我会告诉你它是否正常工作

标签: php switch-statement


【解决方案1】:

根据上述问题的冗长 cmets,您正在寻找的是 while 循环和 if 条件:

$foo = '';  // or some default value incase no match is found
while ($row = mysqli_fetch_assoc($result)) {
    if ($row['mydata1'] == $var) {
        $foo = $row['mydata2'];
        break;
    }
}

目前尚不清楚您为什么在这里真的想要switch,但您似乎只是在考虑这个过程。在逻辑层面上,您尝试做的是:

  • 循环遍历一组记录
  • 将它们与变量进行比较

这是一个循环和一个条件语句。没有必要通过尝试动态生成静态代码结构来过度复杂化。只需遍历您的记录并将它们与您的值进行比较。

【讨论】:

  • 我已经试过了,它可以工作,它不是用开关,但现在我明白你的意思了,它对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2018-11-27
  • 2019-07-28
  • 2021-07-12
  • 1970-01-01
  • 2014-03-03
相关资源
最近更新 更多