问题
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><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?
回答1:
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.
回答2:
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?
来源:https://stackoverflow.com/questions/3400621/php-arrange-table-content-from-horizontal-to-vertical