我正在重新审视这个,因为我正在处理另一个我希望使用相同概念的页面。 This page显示了我目前从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
答案 0 :(得分: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);
答案 1 :(得分:0)
我通常会通过创建一个二维数组来解决这样的问题,按日期然后用ID索引,或者在你的情况下用ID然后是日期。
循环事件(第一个维度)并打印出该事件的内容 - 同时在该事件中循环显示日期并将其作为列表打印出来,如示例所示。