Rendering a table of dates with prices
Let's say you were given the arrival date 12/28/10 and a departure date of 1/5/11, in the form of an array ( which is always consistent and can be relied upon ) such as:
$data = array(
0 => array(
'Date' => '12/28/10',
'Price' => 100
),
1 => array(
'Date' => '12/29/10',
'Price' => 100
),
2 => array(
'Date' => '12/30/10',
'Price' => 100
),
3 => array(
'Date' => '12/31/10',
'Price' => 100
),
4 => array(
'Date' => '1/1/11',
'Price' => 100
),
5开发者_如何学Python => array(
'Date' => '1/2/11',
'Price' => 100
),
6 => array(
'Date' => '1/3/11',
'Price' => 100
),
7 => array(
'Date' => '1/4/11',
'Price' => 100
)
);
How could I generate a table summarising the two weeks of rates up, with the first table cell starting on Sunday and the last table cell on Saturday?
The output would need to be something like:
<table>
<tr>
<thead>
<tr>
<th>Sun</th>
<th>Mon</th>
<th>Tue</th>
<th>Wed</th>
<th>Thu</th>
<th>Fri</th>
<th>Sat</th>
</tr>
</thead>
<tbody>
<tr>
<td>12/26</td>
<td>12/27</td>
<td>12/28</td>
<td>12/29</td>
<td>12/30</td>
<td>12/31</td>
<td>1/1</td>
</tr>
<tr>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
</tr>
<tr>
<td>1/2</td>
<td>1/3</td>
<td>1/4</td>
<td>1/5</td>
<td>1/6</td>
<td>1/7</td>
<td>1/8</td>
</tr>
<tr>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
What I have so far done, is:
$firstDay = strtotime( $data[0]['Date'] );
$firstSunday = strtotime('last sunday', $firstDay);
$lastDay = strtotime( $data[count($data)-1]);
$lastSaturday = strtotime('saturday', $lastDay);
$nights = (( $lastSaturday - $firstSunday ) / 86400) + 1;
$numWeeks = $nights / 7;
for ( $i=0; $i< $numWeeks; $i++) {
}
However I'm not sure if what I'm doing is right, that is looping through the weeks.. because I can't seem to get a reference to the day I want inside of that loop.
Previously, I did not need to generate the mm/dd row so I could rely on looping through all the days, but it's gotten more complex since I need two rows per week now.
try this, it works...
<?php
$firstDay = strtotime( $data[0]['Date'] );
$firstSunday = strtotime('last sunday', $firstDay);
$diff = (( $firstDay - $firstSunday ) / 86400);
$diff2 = 7 - (($diff+count($data))%7);
for($i=0;$i<$diff;$i++){
//Adding missing elements in front of the array
array_unshift($data, array('Date'=> date("m/d/Y",strtotime('-1 day',strtotime($data[0]['Date']))), 'Price'=>'0'));
}
for($i=0;$i<$diff2;$i++){
//Adding missing elements in end of the array
array_push($data, array('Date'=> date("m/d/Y",strtotime('+1 day',strtotime($data[count($data)-1]['Date']))), 'Price'=>'0'));
}
//table header
//cicle until the length of $data (num of days) array will reach
//$i increment by 7 every cicle to simulate the week
//by this you don't need successive counts to retrive corret Date and price from array
for($i=0;$i<count($data);$i=$i+7){
//Every week the $days and price are reset to null
$days="";
$price="";
//cicle the 7 days in a week
for($j=0;$j<7;$j++){
//add the columns Date ($i+$j) is used to retrive the correct array pos
//$j is the day in the "current" week
//$i is the "past week" days
$days.="<td>".$data[$i+$j]['Date']."</td>";
$price.="<td>".$data[$i+$j]['Price']."</td>";
}
//week finished add 2 rows and the respective cols
echo "<tr>".$days."</tr><tr>".$price."</tr>";
}
//table Footer
?>
精彩评论