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

时间:2016-03-10 05:14:16

标签: php mysql arrays

我创建了一个脚本,每年从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);

?>

打印显示“Array()” 但是如果我在for循环中回显每个数组值,它就会打印出来。错误在哪里?

3 个答案:

答案 0 :(得分:1)

虽然有很多方法可以用变量来解决你的问题,但我建议你采用不同的方法。如果年份是您不期望的价值怎么办?它很容易导致混乱。相反,您可以使用可以在不知道年份的确切值的情况下迭代的数组。

$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"]);

答案 1 :(得分:0)

您使用此语句覆盖数组值${"y".$year."[".$i."]"}=$result['avgdose'];请尝试使用此语句:${"y".$year."[".$i."]"}[]=$result['avgdose'];

答案 2 :(得分:0)

${"y".$year} = array()

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

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

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

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