arenaninja Posted November 10, 2011 Share Posted November 10, 2011 I use the following code to create a 48x7 array for my application: // Loop through each time division for($i=0; $i<$div; $i++) { // Loop through the week we're displaying for($j=0;$j<$dayPerPage; $j++) { $dateArray = getDate( mktime( 0, 0, 0, date("m"), date("d")+$j+$dateOffset, date("Y") ) ); $date = sprintf('%04d-%02d-%02d',$dateArray["year"],$dateArray["mon"],$dateArray["mday"]); $datetime[]="$time|$date"; list($start_date) = explode('|',$datetime[1]); list($end_date) = explode('|',end($datetime)); } $min += $step_size; if($min >= 60) { $min = 0; $hr++; } $time = sprintf('%02d:%02d:00',$hr,$min); } Now, I'm under the assumption that list($start_date) and list($end_date) should give me the beginning and ending dates inside the array (say 2011-10-01 and 2011-10-07), but instead I get the beginning and ending times in it ('00:00:00' AND '23:30:00'). Could someone clarify what I'm doing wrong and how I can fix it? I'm really new to php EDIT: Sorry... used the wrong tags for the code the first time around. Fixed. Link to comment https://forums.phpfreaks.com/topic/250831-need-a-tiny-push-with-this-array/ Share on other sites More sharing options...
arenaninja Posted November 10, 2011 Author Share Posted November 10, 2011 fixed the tags in previous post, sorry about that. Also, since I don't need to overwrite these I rewrote the code slightly: // Loop through each time division for($i=0; $i<=($div-1); $i++) { // Loop through the week we're displaying for($j=0;$j<$dayPerPage; $j++) { $dateArray = getDate( mktime( 0, 0, 0, date("m"), date("d")+$j+$dateOffset, date("Y") ) ); $date = sprintf('%04d-%02d-%02d',$dateArray["year"],$dateArray["mon"],$dateArray["mday"]); $datetime[]="$time|$date"; } $min += $step_size; if($min >= 60) { $min = 0; $hr++; } $time = sprintf('%02d:%02d:00',$hr,$min); } list($start_date) = explode('|',$datetime[1]); list($end_date) = explode('|',end($datetime)); But $start_date and $end_date still give me the beginning and ending times, not dates. Link to comment https://forums.phpfreaks.com/topic/250831-need-a-tiny-push-with-this-array/#findComment-1286925 Share on other sites More sharing options...
PFMaBiSmAd Posted November 10, 2011 Share Posted November 10, 2011 I happen to know the person who posted the starting basis of that code, and he wants to know how come you swapped "$date|$time" to be "$time|$date", especially since that is why you are only getting the time part of the result. Link to comment https://forums.phpfreaks.com/topic/250831-need-a-tiny-push-with-this-array/#findComment-1286926 Share on other sites More sharing options...
arenaninja Posted November 10, 2011 Author Share Posted November 10, 2011 I happen to know the person who posted the starting basis of that code, and he wants to know how come you swapped "$date|$time" to be "$time|$date", especially since that is why you are only getting the time part of the result. The way he originally set it up was that the array was populated by half-hour increments and then move on to the next day, but I need to post the results on a table that displays the results for the week and I can only control the rows through <tr> command (and there isn't an equivalent to control the content in columns, as far as I know), so I needed to group them by time in the array instead of by date. Incidentally, I got it to work, though I'm still not sure why it wouldn't the way I had it: // Loop through each time division for($i=0; $i<=($div-1); $i++) { // Loop through the week we're displaying for($j=0;$j<$dayPerPage; $j++) { $dateArray = getDate( mktime( 0, 0, 0, date("m"), date("d")+$j+$dateOffset, date("Y") ) ); $date = sprintf('%04d-%02d-%02d',$dateArray["year"],$dateArray["mon"],$dateArray["mday"]); $datetime[]="$date|$time"; } $min += $step_size; if($min >= 60) { $min = 0; $hr++; } $time = sprintf('%02d:%02d:00',$hr,$min); } list($start_date) = explode('|',$datetime[0]); list($end_date) = explode('|',end($datetime)); And this is how the data is populated (not fully debugged yet, some variables have become redundant and others obsolete, but the idea is there): // iterate over the date/time slots and display any data $k = 1; foreach($datetime as $dt) { // Check for new day if($k==1 || $k%7==1) { // default background color echo "<tr><td bgcolor=\"#c0c0c0\">"; if($startHr < 12 ) echo $startHr.":".$startMin."AM"; else echo $startHr.":".$startMin."PM"; $startMin += $step_size; if( $startMin >= 60 ) { $startMin = "00"; $startHr++; } echo " - ".$startHr.":".$startMin; if ($startHr<12) echo "AM"; else echo "PM"; echo "</td>"; } if(isset($data[$dt])) { $res_duration = $data[$dt]["timestart"]-$data[$dt]["timeend"]; // data exists for this date/time slot echo "<td rowspan=\"". (($res_duration)/$step_size) . "\"><strong>Name: </strong>". $row["first_name"]." ".$row["last_name"]."<br><strong>Email:</strong> <a href=\"mailto:".$row["email"]."\">".$row["email"]."</a>"; } else { // no data for this date/time slot echo"<td><a href=\"signupnow.php?date=".$date."&time=".$oldSHr.":".$oldSMin."&id=".$equipid."\">Sign up</a></td>"; } // Check if day has ended and move to new column if($k%7==0) { echo "</tr>"; } $k++; } Link to comment https://forums.phpfreaks.com/topic/250831-need-a-tiny-push-with-this-array/#findComment-1286960 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.