开发者

PHP arrange table content from horizontal to vertical

开发者 https://www.devze.com 2023-01-10 06:24 出处:网络
I have a script which read a CSV file. <?php echo \'<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\" class=\"sortable\" border=\"1\"><caption>Title Here</caption>

I have a script which read a CSV file.

 <?php
 echo '<table border="0" cellspacing="1" cellpadding="1" class="sortable" border="1"><caption>Title Here</caption>
 <thead><tr><th class="header">Time:</th><th class="header">Value 1:</th><th class="header">Value 2:</th><th class="header">Value 3:</td class="header"><th class="header">Value 4:</th><th class="header">Value 5:</th><th class="header">Value 6:</th><th class="header">Value 7:</th><th class="header">Value 8:</th><th class="header">Value 9:</th></tr></thead&开发者_如何学Pythongt;<tbody><tr>';
 $row = 1;
 if (($handle = fopen("data.csv", "r")) !== FALSE) {
   while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
     $num = count($data);   
     $row++;
     for ($c=0; $c < $num; $c++) {
        if ($c==9) { echo "<td>".$data[$c] ."</td></tr><tr>";}
        else  {echo "<td>".$data[$c] ."</td>"; }
     }
   }
   fclose($handle);
 }
 echo '</tbody></table>';
 ?>

This script just take the data and print them in a html table. I just want to rearrange the table. For example the csv may have these contents

0 1 2 3 4 5 6 7

0 1 2 3 4 5 6 7

0 1 2 3 4 5 6 7

0 1 2 3 4 5 6 7

I wish the out to be:

0 0 0 0

1 1 1 1

2 2 2 2

3 3 3 3

4 4 4 4

and go on... I some I have to put an additional loop.. how can I do it?


Well you'd read the CSV file into a multidimensional array.

Consider that each line in the CSV file is now a column (goes up to down instead of left to right). This is called Transposing rows to columns.

For a table you'll need to loop through each row, not each column. So you create a loop within a loop as shown here:

<table border="0" cellspacing="1" cellpadding="1" class="sortable" border="1"><caption>Title Here</caption>
     <thead><tr><th class="header">Time:</th><th class="header">Value 1:</th><th class="header">Value 2:</th><th class="header">Value 3:</td class="header"><th class="header">Value 4:</th><th class="header">Value 5:</th><th class="header">Value 6:</th><th class="header">Value 7:</th><th class="header">Value 8:</th><th class="header">Value 9:</th></tr></thead><tbody>
<?php
     #read CSV file
     if (($handle = fopen("data.csv", "r")) !== FALSE) {
       $mycsv = array();
       while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) $mycsv[] = $data;
       fclose($handle);


     #Find the length of the transposed row

     $row_length = count($mycsv);

     #Loop through each row (or each line in the csv) and output all the columns for that row
     foreach($mycsv[0] as $col_num => $col)
     {
        echo "<tr>";
        for($x=0; $x<$row_length; $x++)
           echo "<td>".$mycsv[$x][$col_num]."</td>";


        echo "</tr>";
     }

  }
?>
  </tbody></table>

Try that out and let me know if it works.


I'm not exactly sure how your csv file is laid out, but it looks like you might need to store these values in separate arrays for the different digits and then loop through those arrays after you've finished reading the whole csv file. Can you show a brief sample of the csv file so I can get an idea of the data you're reading in?

0

精彩评论

暂无评论...
验证码 换一张
取 消