在创建表时,我无法找到正确的循环方式。我有一个表,其中包含日期,ID和其他数据列表。我需要遍历看起来像这样的表:
rest_id date galls
133 2011-06-01 75
139 2011-06-12 60
133 2011-06-13 85
139 2011-06-22 25
133 2011-06-30 80
最后:
id week 1 week 2 week 3 week 4 week 5
133 75 85 wk3 4 80
139 wk1 60 wk3 25 wk5
我尝试了很多变化,但无法正确循环。我已经使用这种类型的循环数周而且无法得到它。
我有一个例程,可以获得本月的一周:
$weekNum = intval((intval($row_rests['day'])+6)/7);
do { ?>
<td><?php if($weekNum == 1 AND !in_array('1',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '1'); continue;} else echo '1'; array_push($weeklist, '1'); ?></td>
<td><?php if($weekNum == 2 AND !in_array('2',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '2'); continue;} else echo '2'; array_push($weeklist, '2'); ?></td>
<td><?php if($weekNum == 3 AND !in_array('3',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '3'); continue;} else echo '3'; array_push($weeklist, '3'); ?></td>
<td><?php if($weekNum == 4 AND !in_array('4',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '4'); continue;} else echo '4'; array_push($weeklist, '4'); ?></td>
<td><?php if($weekNum == 5 AND !in_array('5',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '5'); continue;} else echo '5'; array_push($weeklist, '5'); ?></td>
<?php
} while ($row_rests = mysql_fetch_assoc($rests));
$weeklist = array();
?>
我一直试图在循环时填充数组。如果周数已经在数组中,则跳过该条目。麻烦的是,有时会有5个条目,有时是0或其间的任何地方。
我需要在每个单元格中获取一些文本,但我没有找到正确的循环组合(我应该总是循环5次)和数组写入。我已经尝试了所有继续的组合;并打破;并在不同的地方重置阵列。
上面的代码在一个遍历rest_ids的循环中,并且工作正常。只是这个子循环让我感到难过。
想法?
答案 0 :(得分:1)
你意识到,你不需要使用PHP / OOP循环来实现它......
查看您的表和您想要获得的结果,您需要做的就是使用SQL中的GROUPBY子句对查询结果进行分组。在该查询中,您可以重命名属性/列名称并在其上添加条件。
答案 1 :(得分:0)
function getWeekOfMonth($date) {
return intval((intval(substr($date,8))+6)/7); //Took just your function
}
$rows = array();
$sql = "SELECT * FROM table";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$found = false;
foreach ($rows as &$savedRow) {
if ($savedRow['id'] == $row['id']) {
$found = true;
$savedRow['wk'.getWeekOfMonth($row['date'])] = $row['galls'];
break;
}
}
if (!$found) {
$tempRow = array(
'id' => $row['id'],
'wk1' => 'wk1',
'wk2' => 'wk2',
'wk3' => 'wk3',
'wk4' => 'wk4',
'wk5' => 'wk5'
);
$tempRow['wk'.getWeekOfMonth($row['date'])] = $row['galls'];
$rows[] = $tempRow;
}
}
如您所见,它首先看,如果id的行已经存在。如果不是,则使用其5个标准值初始化行,然后将当前行设置为其值。如果它已经存在,它只是将正确的值设置为正确的值。
答案 2 :(得分:0)
感谢您的回复!这是我在这里发表的第一篇文章,所以我对格式有点挣扎。 我发布后很快就解决了......当然。
<?php $i = 0;
$y = 0;
while ($i < 5):
$weekNum = intval((intval($row_rests['day'])+6)/7);
?>
<td align="center"><php if(intval($weekNum) == intval($i+1)) {echo $row_rests['galls'];} else echo "-"; ?></td>
<?php
$i++;
if ($weekNum == $i)
$y++;
if($totalRows_rests = 0){
$y = 0;
}
else
{ $y = $y;}
mysql_data_seek ($rests, $y);
$row_rests = mysql_fetch_assoc($rests);
endwhile; ?>
感谢您的帮助!