2013-08-08 2 views
1

ОК так вот мой код:двумерные массивы в 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>"); 

for($i = 0; $i < 12; $i++) { 

    $result = mysql_query("SELECT * FROM posted_events WHERE Month_ = '$months[$i]' ") 
        or die ('Error updating database because: '.mysql_error()); 

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
     $months[$i] = $row['DayNum']; 
    } 


} 

Я не знаю, если вы могли бы получить то, что я пытаюсь сделать здесь, но я объясню, в любом случае. Я пытаюсь получить доступ к моей базе данных и хранить даты, соответствующие их месяцам, и хранить их в массиве, но это не работает:/

Я новичок в этом двумерном массиве, поэтому я Я не знаю, является ли мой синтаксис неправильным или чего я хочу достичь, это невозможно. Спасибо за помощь.

+2

В качестве побочного примечания: избегайте использования устаревших функций 'mysql_ *'. вместо этого используйте 'mysqli_ *'. –

+1

Основная проблема здесь может заключаться в том, что ваш ключ массива является строкой, и вы пытаетесь получить к ним доступ через int. Если это проблема, «array_keys» может вам помочь. – lsouza

ответ

1

$ месяцев [$ я] в конечном итоге, как "массив", потому что это массив

, чтобы получить название месяца, вы должны поставить:

$ month_names = array_keys ($ месяцев);

после $ месяцев переменной

затем использовать его

$ Result = mysql_query ("SELECT * FROM posted_events WHERE Month_ = '$ month_names [$ я]")

ура :)

+0

Спасибо большое. Это сработало! – Kay

1

Ваш массив месяцев представляет собой ассоциативный массив со строками в качестве ключей, поэтому вы можете использовать foreach для перебора по нему вместо инкрементального for. Также не забудьте добавить в массив не перезаписывать его на каждой итерации.

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']; 
     //    ^^ appending not overwriting 
    } 
} 

Боковые ноты:

  • mysql_* устарела, я предлагаю обновление до PDO или MySQLi.
  • Синтаксис or die нежелателен, потому что его трудно изменить, когда вы переходите к производству. Что-то вроде trigger_error() было бы лучше, что бы тихо записывать в журнал ошибок.

Edit: для вывода даты в массиве:

foreach($months as $month => $arr) 
{ 
    echo $month . '<br />'; 
    foreach($arr as $day) 
    { 
     echo $day . '<br />'; 
    } 
} 

выше будет просто эхо из названия месяца, а затем все ниже его даты и повторить в течение следующего месяца.

+0

Woah, спасибо, человек, это имеет большой смысл. – Kay

+0

Без проблем :) счастливое кодирование! – MrCode

+0

эй вы могли бы показать мне, как я могу выводить даты, хранящиеся в массиве? Имея проблему с лиллом, делающую это – Kay

Смежные вопросы