2013-08-20 3 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 ... и я хочу сохранить их таким образом, как:

13 мая 12:00 имеют следующие события => все события. Помогите пожалуйста, спасибо.

+0

Ваши массивы могут иметь столько размеров, сколько вы хотите. –

+0

Возможно, вам нужно что-то вроде '$ months [$ month] [] = $ row;'? –

+0

, но как бы получить информацию, хранящуюся, например, как: 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. Вы можете заменить его на substr($row['STARTTIME'],0,2), если тип данных TIME.

Я также предлагаю вам использовать mysqli или PDO вместо клиента mysql, поскольку он устарел в PHP 5.5 и более новых версиях.

+0

, и если я хочу добавить ENDTIME и DESCRIPTION, есть другие инструкции while с добавленными строками? Также вы могли бы объяснить использование «% H»? – Kay

+0

То, что мне нужно. Большое спасибо! – Kay

+0

Да, отредактировано прямо сейчас. Одного пока достаточно для всех полей, и вы даже можете работать, чтобы удалить цикл «за» и сделать вещи более эффективными. – Thundar

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