在循环中创建的 PHP 数组,但不打印


PHP array created inside for loop but not printing

我创建了一个脚本来从 mysql 表中获取每年的数据,并放入相应年份的数组中。我检查了sql,while循环迭代正在工作。

<?php

mysql_select_db($database_hari,$hari);
$start=2013 ;
$end=2015;
$xdata=array();
for($year=$start;$year<=$end;$year++){
     ${"y".$year}=array();
    $i=0;
    $query=mysql_query("SELECT tld_master.location,tld_dose.year, AVG(tld_dose.dose)*4 as avgdose from tld_master left join tld_dose on tld_master.tldno=tld_dose.tldno where tld_master.site='F' and tld_dose.year=$year GROUP BY tld_dose.year, tld_dose.tldno");
    while($result=mysql_fetch_array($query)){
$xdata[$i]=$result['location'];
 ${"y".$year."[".$i."]"}=$result['avgdose'];

$i++;
}
    }
print_r($y2015);
?>

打印显示"数组()"但是,如果我在循环中回显每个数组值,它会打印。错误在哪里?

虽然有一些方法可以用变量解决你的问题,但我建议你采取不同的方法。如果年份是您意想不到的值怎么办?它很容易导致混乱。相反,您可以使用一个数组,您可以在不知道年份的确切值的情况下循环访问该数组。

$yearArray = array();
for($year=$start;$year<=$end;$year++){
    $sql = "SELECT
              tld_master.location,tld_dose.year, AVG(tld_dose.dose)*4 as avgdose 
            FROM tld_master 
            LEFT JOIN tld_dose on tld_master.tldno=tld_dose.tldno 
            WHERE tld_master.site='F' and tld_dose.year={$year} 
            GROUP BY tld_dose.year, tld_dose.tldno";
    $query = mysql_query($sql);
    $yearArray[$year] = array();
    while($result=mysql_fetch_array($query)){
        $xdata[] = $result['location'];
        $yearArray[$year][] = $result['avgdose'];
    }
}

现在,您可以打印$yearArray变量以查看实际结果。而且您可以轻松使用它。

print_r($yearArray["2015"]);
${"y".$year} = array()

创建一个名为 $y2015 的变量,保存一个数组。 代码

${"y".$year."[".$i."]"} = ...

创建一个命名奇怪的变量$y2015[0],它与变量$y2015完全无关。 你想要:

${"y".$year}[$i] = ...

你用这个语句覆盖你的数组值${"y".$year."[".$i."]"}=$result['avgdose'];尝试使用这个: ${"y".$year."[".$i."]"}[]=$result['avgdose'];