2013-08-20 66 views
-1

我想知道是否有可能在php數組中有多個維度。我在我的數據庫7列,我需要的數據到相應的變量 代碼:在php數組中的多維數

$months = Array(); 
    $months = ['January'=>array(), 'February'=>array(), 'March'=>array(), 'April'=>array(), 'May'=>array(), 'June'=>array(), 'July'=>array(), 'August'=>array(), 'September'=>array(), 
         'October'=>array(), 'November'=>array(), 'December'=>array() ]; 



    // Connect to MySQL 
     if (!($database = mysql_connect("localhost", 
      "root", "")))      
      die("Could not connect to database </body></html>"); 

    // open Events database 
     if (!mysql_select_db("Events", $database)) 
      die("Could not open Events database </body></html>"); 

      foreach($months as $month => $arr) { 



      $result = mysql_query("SELECT * FROM posted_events WHERE Month_ = '$month' ") 
        or die ('Error updating database because: '.mysql_error()); 
      } 
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
        $months[$month][] = $row['DayNum']; 


    } 
} 

所以你可以看到$months是包含了一個月的二維數組,該月在我的數據庫中的天。但在我的數據庫中,我還有其他的東西,比如EVENTNAME,STARTTIME,ENDTIME,DESCRIPTION ETC等等,我想以這樣的方式存儲它們:

5月13日晚上12點有以下事件=>所有事件。 請幫忙,謝謝。

+0

您的陣列可以擁有您想要的尺寸。 –

+0

也許你想要像'$ months [$ month] [] = $ row;'? –

+0

但我如何獲取存儲的信息,例如:5月12日下午2點? – Kay

回答

1

首先,您的for週期有相同的混亂:$i未使用,while超出週期。如果你需要像月 - 日 - 小時 - 事件,你需要一個四維陣列,如:

foreach($months as $month => $arr) { 
     for($i = 1; $i <=31; $i++){ // you can still work around this "for" cycle: it isn't the best option 
     $months[$month][$i] = array(); // third dimension 
      $result = mysql_query("SELECT * FROM posted_events WHERE Month_ = '$month' AND DayNum='$i' ") 
        or die ('Error updating database because: '.mysql_error()); 
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
        $months[$month][$i][strftime('%H',$row['STARTTIME'])] = $row; // fourth dimension 
     } 
     mysql_free_result($result); 
     } 
} 

你會得到ENDTIME和描述,數組的第四維。你可以找到他們的值,如$months['January'][13]['12']['DESCRIPTION']$months['January'][13]['12']['ENDTIME']

關於strftime('%H',$row['STARTTIME']):這是一個函數,它只從$ row ['STARTTIME']獲取小時,假設它存儲爲TIMESTAMP數據類型。如果數據類型爲TIME,則可以用substr($row['STARTTIME'],0,2)替代它。

我還建議您使用mysqli或PDO代替mysql客戶端,因爲它在PHP 5.5和更新版本中已棄用。

+0

,如果我想添加ENDTIME和DESCRIPTION有其他while語句與這些添加行?你也可以解釋'%H'的用法嗎? – Kay

+0

正是我需要的。非常感謝! – Kay

+0

是的,現在編輯。一段時間對於所有領域來說已經足夠了,你甚至可以努力去除「for」週期並使事情更有效率。 – Thundar