| By: Jeff Date: 2006-01-11 Time: 15:50 | Problem while merging a 2D arrayHi Skrol29, 
First of all I would like to thank you for this nice piece of code that turn our lifes easier while using it! I have been using it for about 6 months and I am really enjoying it. But I am having some troubles when trying to merge a bi-dimensional array (matrix).
 
I have followed the example where you show the "Dynamic columns" because I thought it would be the closest one that would be applied to my problem. But I am just getting one row (the first row only) being showed in the HTML as result.
 
Here is the code:
 
HTML:
 | <table width="100%" height="100%" border="1" cellpadding="1" cellspacing="0"> <tr>
 <td bgcolor="DDDDDD" colspan="31"><b>Days</b></td>
 </tr>
 <tr>
 <td bgcolor="DDDDDD">[c0.key;block=td]</td>
 </tr>
 <tr>
 <td>[r.[c1.val;block=td];frm='hh:nn']</td>
 </tr>
 <tr><td colspan="31"> </td></tr>
 </table>
 
 | 
PHP:
 | public function generateReportCheckPointVisit() {
 $conn = DBConnection::returnInstance();
 $conn->setDatabase("test");
 $TBS = new clsTinyButStrong();
 $TBS->LoadTemplate('itf/Alpha/pages/mapaframe.htm');
 $dh = new DateHour(null,null,null,01,01,2005);
 
 $dates = array();
 for($col=1;$col<=$dh->lastDayOfMonth();$col++)
 $dates[$col] = 'column_'.$col;
 
 $data = array();
 $rs = $conn->runQuery("SELECT DISTINCT starthour,endhour,buttoncode FROM Buttons INNER JOIN PatrolsCheckPoints ON buttoncode = Buttons_buttoncode INNER JOIN PatrolsCheckPoints_has_PatrolsCircuits ON Buttons_buttoncode = PatrolsCheckPoints_Buttons_buttoncode INNER JOIN PatrolsCircuits ON PatrolsCircuits_circuitcode = circuitcode  WHERE visitdate >= '2005-01-01' AND visitdate <= '2005-01-31' ORDER BY starthour");
 $row = 1;
 while(!$rs->EOF)
 {
 if($rs->fields["starthour"]>="23:00:00")
 $query = "SELECT visitdate,visithour,buttoncode FROM Buttons INNER JOIN PatrolsCheckPoints ON buttoncode = Buttons_buttoncode INNER JOIN PatrolsCheckPoints_has_PatrolsCircuits ON Buttons_buttoncode = PatrolsCheckPoints_Buttons_buttoncode INNER JOIN PatrolsCircuits ON PatrolsCircuits_circuitcode = circuitcode  WHERE visitdate >= '2005-01-01' AND visitdate <= '2005-01-31' AND visithour >= '".$rs->fields["starthour"]."' AND buttoncode = '".$rs->fields["buttoncode"]."' ORDER BY visitdate,visithour";
 else
 $query = "SELECT visitdate,visithour,buttoncode FROM Buttons INNER JOIN PatrolsCheckPoints ON buttoncode = Buttons_buttoncode INNER JOIN PatrolsCheckPoints_has_PatrolsCircuits ON Buttons_buttoncode = PatrolsCheckPoints_Buttons_buttoncode INNER JOIN PatrolsCircuits ON PatrolsCircuits_circuitcode = circuitcode  WHERE visitdate >= '2005-01-01' AND visitdate <= '2005-01-31' AND visithour >= '".$rs->fields["starthour"]."' AND visithour < '".$rs->fields["endhour"]."' AND buttoncode = '".$rs->fields["buttoncode"]."' ORDER BY visitdate,visithour";
 $rs2 = $conn->runQuery($query);
 $data_col = array();
 $col = 1;
 while(!$rs2->EOF)
 {
 $i = explode("-",$rs2->fields["visitdate"]);
 $data_col[$dates[$i[2]]] = $rs2->fields["visithour"];
 $rs2->MoveNext();
 $col++;
 }
 $data[$row] = $data_col;
 $data_col = null;
 $row++;
 $rs->MoveNext();
 }
 for($i=1;$i<=count($data);$i++)
 {
 for($j=1;$j<=31;$j++)
 {
 if($data[$i]["column_".$j]=='' || $data[$i]["column_".$j]==null)
 $data[$i]["column_".$j] = "";
 }
 ksort($data[$i]);
 }
 $TBS->MergeBlock('c0,c1',$dates);
 $TBS->MergeBlock('r',$data);
 $TBS->Show();
 }
 
 | 
The idea of this code is to take the result from the query that is run at $rs2, take this result and sort it at the $data array and I must show the data of this array in the HTML (I am using the ADODB library together with the tbsdb_jladodb.php to be able to work with ADODB+TBS). If you pay attention both PHP and HTML codes are very similar to the "Dynamic columns" example. 
This shouldn't produce all the rows? It is just showing the first one. I have been debugging the code trying to find the problem but I just didn't. This code should't produce something like this:
 | 1       2       3      4      5 1 data  data data
 2                data   data  data
 .
 .
 .
 
 | 
But it is just producing this:
 
Thanks for the space and the opportunity! 
Jeff. | 
	
      | By: Skrol29 Date: 2006-01-11 Time: 16:34 | Re: Problem while merging a 2D arrayHello,
 This is probably because tag [r.[c1.val;block=td];frm='hh:nn']
 doesn't have "block=tr".
 
 When a block hasn't a bound definition, TBS merges only the first record.
 
 | 
	
      | By: Jeff Date: 2006-01-12 Time: 12:56 | Re: Problem while merging a 2D arrayHi Skrol,
 Thanks for your attention. I have changed [r.[c1.val;block=td];frm='hh:nn'] to [r.[c1.val;block=tr];frm='hh:nn'] but then instead of printing by row it is printing by column and still printing just one row/column from the array. I have tried changing to [r.[c1.val;block=td];frm='hh:nn';block=tr] but I had no changes/result.
 
 I had just followed the example that show the "Dynamic columns" and the block is defined as td as well in the HTML. Both codes are very similar.
 
 I am using PHP 5.0.5 with TBS 2.05.5.
 
 Is there any other way for printing 2D arrays/matrix using the TBS?
 
 Thank you very much for your attention!
 | 
	
      | By: Skrol29 Date: 2006-01-12 Time: 18:08 | Re: Problem while merging a 2D arrayCould you send to me a var_export() of $dates and $data, so I can reproduce your snippet in local? | 
	
      | By: Jeff Date: 2006-01-23 Time: 14:27 | Re: Problem while merging a 2D arrayHi Skrol,
 I had already sorted it out! I guess my fail was because I think I didn't had updated the HTML file in the server I was using.
 The problem was sorted using [r.[c1.val;block=td];frm='hh:nn';block=tr].
 
 Thank you very much for your help!
 | 
	
    
	
    
      |  | 
		  Posting in progress.Please wait...
 |