如何将数组与数据库表匹配?

时间:2013-07-08 12:26:37

标签: php

我想将日历显示为特定月份的数据显示该月的所有数据。

假设我的数据库中有数据为..

Jan=124;   Jan=243;   Jan=354
Feb=978;  Feb=765;   Feb=756;

可以是:

Jan,2013
   124
   243
   354

Feb,2013
   978
   765
   756

我已经完成了这段代码:

<?php
$q2="select * from  calendar";
$res2=mysql_query($q2);
$row2=mysql_fetch_assoc($res2);
$mnth = array('Jan','Feb');
$j= count($mnth);
for ($i=0; $i<= $j; $i++){
    if($row2['month']=='June'){ 
        ?><tr><td><?php 
        echo $row2['month']; ?> , <?php echo $row2['year']; 
        ?></td></tr><tbody><div><?php

        include("connection.php");
        $q1="select * from  calendar";
        $res=mysql_query($q1);

        while($row=mysql_fetch_assoc($res)){
            ?><tr><td><?php 
            echo $row['dates']; 
            ?></td></tr></tbody></div><?php 
        } 
    }
}

1 个答案:

答案 0 :(得分:2)

每次需要打印HTML标签时,我都会重新考虑打破PHP。它使您的代码难以阅读。

另外,你在循环中进行查询,这是一个坏主意,看起来完全没有问题。

您的循环中还有一个开放的<tbody>标记,没有关闭</tbody>标记。

而且,正如@AleksG在评论中提到的那样,您不应该使用mysql_*函数,因为它们已被弃用。我建议切换到PDO。

所以回答......

假设您的表结构如下所示:

+-------+------+-------+
| month | year | dates |
+-------+------+-------+
| Jan   | 2013 | 124   |
| Jan   | 2013 | 243   |
| Jan   | 2013 | 354   |
| Feb   | 2013 | 978   |
| Feb   | 2013 | 765   |
| Feb   | 2013 | 756   |
+-------+------+-------+

根据您的问题标题,这会将值放入数组中,键是月份和年份,值是数字“日期”字段:

// replace the below line with your mysql connection string
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$result = $dbh->query('
    SELECT month, year, dates FROM calendar ORDER BY year, month
');

$mnth = array();
foreach ($result as $row) {
    $key = $row['month'] .','. $row['year']; // e.g. 'Jan,2013'
    // push the new value. The inner array will be created automatically
    $mnth[$key][] = $row['dates'];
}

print_r($mnth);
/* will look like this:
Array(
    [Jan,2013] => Array(
        [0] => 124,
        [1] => 243,
        [2] => 354
    ),
    [Feb,2013] => Array(
        [0] => 978,
        [1] => 765,
        [2] => 756
    )
) */

但根据您的代码,您似乎希望将其输出为HTML表格。所以这就是你如何做到这一点。查询是相同的,所以这只是替换循环:

echo '<table>';
$current = '';
foreach ($result as $row) {
    // check to see if we've switched to a new month/year
    $next = $row['month'] .','. $row['year'];
    if ($current != $next) {
        // if we have moved to a new month/year, print a new header row
        echo '<tr><th>'. $next .'</th></tr>';
        // and update $current
        $current = $next;
    }

    echo '<tr><td>'. $row['dates'] .'</td></tr>';
}
echo '</table>';