【问题标题】:How to create a dynamic PHP switch statement from MySQL query如何从 MySQL 查询创建动态 PHP switch 语句
【发布时间】:2011-07-13 21:51:54
【问题描述】:

这是为了将电子邮件中的图像、类别和 cmets 添加到我正在处理的照片库中。

我正在从电子邮件正文中提取前两个找到的类别名称,并且需要将类别 ID 分配给 $cat 变量以插入 DB。

我让它工作正常,硬编码,但想让它动态化,这样对类别名称的更改将贯穿整个过程。

我想更改的 switch 语句:

硬编码:

foreach($foundKeywords as $key => $value) {  
            if($key<=1){

switch($value)
        {
            case 'family':
            $cat='3';
            break;
            case 'friends';
            $cat='4';
            break;
            case 'fun';
            $cat='6';
            break;
            case 'places';
            $cat='5';
            break;
            case 'general';
            $cat='2';
            break;
            case 'henry';
            $cat='7';
            break;
            default;
            $cat='2';
        }

我想从 MySQL 表中提取类别并这样做:

$res = mysql_query('SELECT * FROM gallery_category');
            $cat_switch_list = "";
            while($row = mysql_fetch_array($res)){
                $cat_switch_list .= "case '".$row[1]."':
                                    $cat = ".$row[0].";
                                    break;";
            }
            //////////////////////
            foreach($foundKeywords as $key => $value) {  
                if($key<=1){


                    switch($value)
                    {
                        echo $cat_switch_list;
                        default:
                        $cat='1';
                    }

理论上,我相信这应该可行,但有些地方不对。

有什么建议吗?

【问题讨论】:

  • 您意识到您的$cat 变量最终将与最后一个“关键字”一样,对吧?你不能以这种方式动态生成 PHP(至少,不是没有 eval 或类似的),你不应该,也不需要它。

标签: php mysql switch-statement


【解决方案1】:

最好还是直接使用mysql查询:

mysql_query('select id from gallery_category where name=\''.mysql_real_escape($name).'\'');

或者通过从你的结果生成一个数组:

$result = mysql_query('select * from gallery_category');
$categories = array();
while($row = mysql_fetch_num($result))
{
  $categories[$row[1]] = $row[0];
}

然后,您只需在您的类别数组中查找正确的 id:$id = $categories[$name]

如果你想生成看起来像的代码,你可以使用 var_export() 将 $categories 变量保存到真实的 php 代码中。要生成代码吗?

【讨论】:

  • 非常感谢您的帮助。简单地查询数据库是显而易见的方法!难怪我没想到。
【解决方案2】:

根本不需要switch 语句(您要求的不是switch 语句的用途)。

只需将$cat 值存储在描述类别的同一个表中。然后您只需从该表中进行选择,在每一行中都有您需要的 $value$cat

【讨论】:

  • 不,吉米。这不是开关的用途。我还在学习。但是,它当时确实完成了工作,所以我很高兴至少它正在工作。
  • 对,(短)静态值列表很好,但是当您尝试使其动态时,它就会变得毛茸茸。并不是说听起来像个混蛋,只是想表达您的情况现在更容易了,因为您不需要switch。 :)
【解决方案3】:

进行数据库查询并将结果加载到关联数组中:

$result = mysql_query('SELECT name, id FROM gallery_category');
$categories = array();
while ($row = mysql_fetch_assoc($result))
{
    $categories[$row['name']] = $row['id'];
}

foreach ($foundKeywords as $key => $val)
{
    if ($key <= 1)
    {
        $cat = $categories[$val];
        // Do whatever processing/output you need to do with this keyword
    }
}

注意:此代码未经测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多