如何调用PHP动态变量名


How to call on a PHP dynamic variable name?

我在SQL服务器上有24条数据。当我的网页启动时,它会从服务器上一次一个地提取所有这些数据并显示出来。看起来像这样:

$sql = "SELECT `$dateName` FROM `$user` WHERE hour=2";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
     while ($row = $result->fetch_assoc()) {
         $hour2 = $row[$dateName];
     }
}
$sql = "SELECT `$dateName` FROM `$user` WHERE hour=3";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
     while($row = $result->fetch_assoc()) {
         $hour3 = $row[$dateName];
     }
}

等等。。。直到24小时。

但我认为用for循环更好。像这样:

for ($x = 1; $x <= 24; $x++) {
    $sql = "SELECT `$dateName` FROM `$user` WHERE hour=`$x`";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
         while($row = $result->fetch_assoc()) {
             $hour.$x = $row[$dateName];
         }
    }                          
}

我想打$hour1,$hour2,$hour3。通过将$x添加到$hour。我该怎么做?非常感谢!

我建议创建$hours数组,而不是生成动态变量。

$hour = array();
for ($x = 1; $x <= 24; $x++) {
    $sql = "SELECT `$dateName` FROM `$user` WHERE hour=`$x`";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
         while($row = $result->fetch_assoc()) {
             $hour[$x][] = $row[$dateName];
         }
    }
 }

这样你就可以访问$hour[1]、$hour[2]。。。等等。

将它们包装到${'hour'.$x} = $row[$dateName]

您可以使用变量:

${"hour" . $x} = $row[$dateName];

您可以创建$hour作为数组,使用$x作为键,并为键设置适当的值。

例如:

$hours = array();
for ($x = 1; $x <= 24; $x++) {
    $sql = "SELECT `$dateName` FROM `$user` WHERE hour=`$x`";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
         while($row = $result->fetch_assoc()) {
             $hour[$x] = $row[$dateName];
         }
    }
}
echo $hour[1];

注:

您应该考虑使用一种更有效的方式,即不必每小时24次单独连接到数据库。

例如:

$sql = "SELECT `$dateName` FROM `$user` ORDER BY hour ASC";

这将在一个查询中返回所有24行,然后您可以使用PHP操作数据。

function pullRequest($dateName,$user,$x){
    //Define $conn here
    $sql = "SELECT `$dateName` FROM `$user` WHERE hour=`$x`";
    $result = $conn->query($sql);
    $hour = array();
    if ($result->num_rows > 0) {
         while($row = $result->fetch_assoc()) {
             $hour[$x] = $row[$dateName];
         }
    }
    return $hour[$x];
} 
Then you can call it like this
$dateName ="DATENAME";
$user="USER";
 for ($x = 1; $x <= 24; $x++) {
    pullRequest($dateName,$user,$x);
 }