-1

我正在重新审视这一点,因为我正在处理另一个我想使用相同概念的页面。 此页面显示了我当前从我的 MSSQL 服务器获得的输出。

我有一张我们的活动发生的场地信息表(名称、地址等)。另外,我有一个计划的实际事件表(一个事件可能在一天内和/或多天发生多次)。我通过查询加入这些表(如下所示)。

<?php
try {
    $dbh = new PDO("sqlsrv:Server=localhost;Database=Sermons", "", "");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT TOP (100) PERCENT dbo.TblSermon.Day, dbo.TblSermon.Date, dbo.TblSermon.Time, dbo.TblSermon.Speaker, dbo.TblSermon.Series, dbo.TblSermon.Sarasota, dbo.TblSermon.NonFlc, dbo.TblJoinSermonLocation.MeetingName, dbo.TblLocation.Location, dbo.TblLocation.Pastors, dbo.TblLocation.Address, dbo.TblLocation.City, dbo.TblLocation.State, dbo.TblLocation.Zip, dbo.TblLocation.Country, dbo.TblLocation.Phone, dbo.TblLocation.Email, dbo.TblLocation.WebAddress
        FROM dbo.TblLocation RIGHT OUTER JOIN dbo.TblJoinSermonLocation ON dbo.TblLocation.ID = dbo.TblJoinSermonLocation.Location RIGHT OUTER JOIN dbo.TblSermon ON dbo.TblJoinSermonLocation.Sermon = dbo.TblSermon.ID
        WHERE (dbo.TblSermon.Date >= { fn NOW() })
        ORDER BY dbo.TblSermon.Date, dbo.TblSermon.Time";
    $stmt = $dbh->prepare($sql);
    $stmt->execute(); 
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    foreach ($stmt as $row) {
        echo "<pre>";
        print_r($row);
        echo "</pre>";
    }
    unset($row);
    $dbh = null;
}
catch(PDOException $e) {
    echo $e->getMessage();
}
?>

因此,当它遍历查询结果时,它会为每条记录创建一个数组。

Array
(
    [Day] => Tuesday
    [Date] => 2012-10-30 00:00:00.000
    [Time] => 07:00 PM
    [Speaker] => Keith Moore
    [Location] => The Ark Church
    [Pastors] => Alan & Joy Clayton
    [Address] => 450 Humble Tank Rd.
    [City] => Conroe
    [State] => TX
    [Zip] => 77305.0
    [Phone] => (936) 756-1988
    [Email] => info@thearkchurch.com
    [WebAddress] => http://www.thearkchurch.org
)
Array
(
    [Day] => Wednesday
    [Date] => 2012-10-31 00:00:00.000
    [Time] => 07:00 PM
    [Speaker] => Keith Moore
    [Location] => The Ark Church
    [Pastors] => Alan & Joy Clayton
    [Address] => 450 Humble Tank Rd.
    [City] => Conroe
    [State] => TX
    [Zip] => 77305.0
    [Phone] => (936) 756-1988
    [Email] => info@thearkchurch.com
    [WebAddress] => http://www.thearkchurch.org
)
Array
(
    [Day] => Tuesday
    [Date] => 2012-11-06 00:00:00.000
    [Time] => 07:00 PM
    [Speaker] => Keith Moore
    [Location] => Fellowship Of Faith Christian Center
    [Pastors] => Michael & Joan Kalstrup
    [Address] => 18999 Hwy. 59
    [City] => Oakland
    [State] => IA
    [Zip] => 51560.0
    [Phone] => (712) 482-3455
    [Email] => ffcc@frontiernet.net
    [WebAddress] => http://www.fellowshipoffaith.cc
)
Array
(
    [Day] => Wednesday
    [Date] => 2012-11-14 00:00:00.000
    [Time] => 07:00 PM
    [Speaker] => Keith Moore
    [Location] => Faith Family Church
    [Pastors] => Michael & Barbara Cameneti
    [Address] => 8200 Freedom Ave NW
    [City] => Canton
    [State] => OH
    [Zip] => 44720.0
    [Phone] => (330) 492-0925
    [Email] => 
    [WebAddress] => http://www.myfaithfamily.com
)

我想要做的是以某种方式组合这些数组,以便不会每次都重复场地信息,而是显示每个日期/时间。

我尝试以数组样式输入它,但无法为它找出合适的多维性。我只是粘贴我希望它显示的方式,因为这就是它的最终结果。

The Ark Church
    Contact:
        Alan & Joy Clayton
        450 Humble Tank Rd.
        Conroe, TX  77305
        (936) 756-1988
        info@thearkchurch.com
        http://www.thearkchurch.org
    Meetings:
        Tuesday, 2012-10-30 07:00 PM
        Wednesday, 2012-10-31 07:00 PM

Fellowship Of Faith Christian Center
    Contact:
        Michael & Joan Kalstrup
        18999 Hwy. 59
        Oakland, IA  51560
        (712) 482-3455
        ffcc@frontiernet.net
        http://www.fellowshipoffaith.cc
    Meetings:
        Tuesday, 2012-11-06 07:00 PM

Faith Family Church
    Contact:
        Michael & Barbara Cameneti
        8200 Freedom Ave NW
        Canton, OH  44720
        (330) 492-0925
        http://www.myfaithfamily.com
    Meetings:
        Wednesday, 2012-11-14 07:00 PM

它不一定要以那样结束,但它应该很好地了解我在寻找什么。

我不一定创建一个新数组。只是不想一遍又一遍地显示相同的信息。

我在想我可以进行某种形式的比较,foreach()其中说的是“如果位置与以前的位置相同”,但我还没有弄清楚如何去做(有没有办法缓存以前的变量做$location1 = [Location], $location2 = [Location], 等等...?

有一点要注意...

这些示例没有不同的扬声器,但有时会有。我希望能够以某种方式访问​​扬声器。我假设我希望它绑定到实际事件。

JJ

4

2 回答 2

0

一种技术:如果你有这样的循环:

while ($row = $query->fetch(PDO::FETCH_NUM) ) {
    list($time,$place,$etc) = $row;
    // display formatted data
}

试试这个:

$row = $query->fetch();
do {
    list($time,$place,$etc) = $row;
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($time != $row[0] && $place != $row[1] && $etc != $row[2]) {
        // display formatted data
    }
} while ($row);
于 2012-06-18T16:15:14.727 回答
0

我通常会通过创建一个二维数组来解决这样的问题,该数组按日期然后 ID 进行索引,或者在您的情况下按 ID 然后日期进行索引。

循环遍历事件(第一个维度)并打印出该事件的内容 - 在那里循环遍历该事件的日期并将其打印为列表,如您的示例所示。

于 2012-06-18T16:20:03.483 回答