2016-03-10 38 views
0

我創建了一個腳本來從每個年份的mysql表中獲取數據並放入相應年份的數組中。我檢查了sql和while循環迭代工作。內部創建PHP數組for循環但不打印

<?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); 

?> 

打印顯示「陣列()」 但是,如果我內部呼應各數組值for循環它打印。錯誤在哪裏?

+2

你用'$ {「y」。$ year} [$ i]'來代替'$ {「y」。$ year。「[」。$ i。「]」 }'? – Havenard

+1

雖然這很奇怪,但動態創建變量名稱。你可以使用'$ years = []',然後使用'$ years [$ year] [$ i] = ...'。 – Havenard

回答

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

創建一個名爲$y2015變量,保持陣列。代碼

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

創建一個奇怪命名變量$y2015[0],這是完全無關的變量$y2015。你想要:

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

你這個說法覆蓋您的數組值${"y".$year."[".$i."]"}=$result['avgdose'];嘗試使用這個來代替:儘管有辦法可變變量來解決問題${"y".$year."[".$i."]"}[]=$result['avgdose'];

+0

謝謝。我改變了這個$ {「y」。$ year} [$ i] = $ result ['avgdose'];和工作 – mansoondreamz

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