首页 > 解决方案 > 从单个 While 循环创建多个变量并执行它

问题描述

我一直在尝试执行以下操作:我已将主题存储在以逗号分隔的数据库中以创建一个数组。然后,我正在运行一个 foreach 循环,以便在对象被分解后获取它们。我被卡住的部分是我试图根据主题名称创建变量,然后运行一个 mysqli 代码,该代码将根据我应该设置的主题名称从 DB 中的另一个表中获取信息。

我试过使用 eval,它在我运行代码时不显示任何内容。

$hwvar = "";
$hwsubject = "";
foreach ($hwarray as $hwvar) {
    eval("$hwvar = $row".""."['$hwvar']");            
}
?>
    <td><?php echo $hwvar; ?></td>

所以我需要循环来为每个项目生成以下内容是循环($sujectname 是从数据库中存储和派生的内容,例如 homework1)$subjectname = $row['$subjectname'];

标签: php

解决方案


只输出循环内部会更简单、更安全(eval() 在坏人手中是一个危险的函数)<TD>

foreach ($hwarray as $hwvar) {
    $dat = $row[$hwvar];
    echo "<td>$dat</td>";
}
?>

注意:eval()出于各种原因,应该不惜一切代价避免。

最容易理解的是,在全局范围内动态创建变量有可能覆盖一个或多个现有变量,这使得调试成为一场彻头彻尾的噩梦。

更新,评论后

我没有你的数据库,所以我模拟了一个简单的例子来说明我假设你在做什么

// dummy database result containing 2 result rows
$rows = [['home'=>'100', 'home2'=> '200'],['home'=>'300', 'home2'=> '400']];

// yoour list of required columns
$hwarray = ['home','home2'];

// loop over the query resultset 
// your code might be a while loop over a fetch like
// while ($row = $result->fetch_assoc()){
// for example

foreach ($rows as $row){
    foreach ($hwarray as $hwvar) {
        echo "<td>$row[$hwvar]</td>";
    }
}

推荐阅读