Reputation: 69
Can someone help me with this array that I have? I want to create a table that is a maximum of 5 columns and a maximum of 15 rows. If there are only 4 rows, for example, then only 4 rows should be shown instead of the 15. If there are only 3 cells that have data then the the remaining 2 should be padded with $nbsp;
.
Here is my sample array:
Array
(
[0] => Array
(
[name] => test1
[item_id] => 1
)
[1] => Array
(
[name] => test2
[item_id] => 2
)
[2] => Array
(
[name] => test3
[item_id] => 3
)
[3] => Array
(
[name] => test4
[item_id] => 4
)
[4] => Array
(
[name] => test5
[item_id] => 5
)
[5] => Array
(
[name] => test6
[item_id] => 6
)
)
My data repeats if there is a new row added. This is my issue at present.
$row = count( $array ) / 5;
$col = 5;
echo'<table border="1" width="700">';
for( $i = 0; $i < $row; $i++ )
{
echo'<tr>';
for( $j = 0; $j < $col; $j++ ) {
if( ! empty( $array[$j] ) ) {
echo '<td>'.$array[$j]['item_id'].'</td>';
}
}
echo'</tr>';
}
echo'</table>';
Upvotes: 6
Views: 27736
Reputation: 4415
Here's a snippet I wrote to test converting a php array to html.
$row = array(
'column 1' => 'value',
'column 2' => 'value',
'column 3' => 'value',
'column 4' => 'value',
'column 5' => 'value',
'column 6' => 'value',
'column 7' => 'value',
);
$rows = array($row, $row, $row, $row, $row, $row, $row, $row, $row, $row);
print array_to_html($rows);
function array_to_html($data) {
$report = "";
if (count($data) > 0) {
$report .= "<table>";
$report .= sprintf("<tr><th>%s</th></tr>", join("</th><th>", array_keys($data[0])));
foreach ($data as $row) {
$report .= "<tr>";
foreach ($row as $column) {
$report .= "<td>$column</td>";
}
$report .= "</tr>";
}
$report .= "</table>";
} else {
$report = "No data";
}
return $report;
}
Upvotes: 2
Reputation: 5883
Let's call your array $rows
, ok?
echo "<table>";
foreach ($rows as $row) {
echo "<tr>";
foreach ($row as $column) {
echo "<td>$column</td>";
}
echo "</tr>";
}
echo "</table>";
Using foreach
is more idiomatic for looping trough arrays in php, and it greatly increase your code's readability. Plus, the only variable you need for this is one containing the array itself.
Upvotes: 11
Reputation: 382666
Check out:
It is basically simple logic something like this:
echo "<table border=\"5\" cellpadding=\"10\">";
for ($i=0; $i < count($input); $i++)
{
echo "<tr>";
for ($c=0; $c<$cols; $c++)
{
echo "<td>$input[$i]</td>";
}
echo "</tr>";
}
echo "</table>";
Upvotes: 2