Break PHP into 3 columns and display one by one - php

I'm trying to break a PHP array into 3 columns (has to be columns, not rows) so it would look something like this:
Item 1 Item 5 Item 9
Item 2 Item 6 Item 10
Item 3 Item 7 Item 11..............
Item 4 Item 8

Update to Meldin answer
$cols = 3; // Number of columns
$len = ceil(count($items) / $cols);
echo '<ul class="floatleft">';
for ($i = 0; $i < count($items); $i++) {
if ($i % $len == 0)
echo '</ul><ul class="floatleft">';
echo "<li>" . $items[$i] . "</li>";
}
echo '</ul>';
Also you can try this using two foreach() loops
$len = ceil(count($items)/3);
$itm = array_chunk($items,$len,true);
foreach($itm as $cols){
echo '<div class="floatleft">';
echo '<ul>';
foreach($cols as $col){
echo '<li>'.$col.'</li>';
}
echo '</ul>';
echo '</div>';
}

Use this
echo '<ul class="floatleft">';
for($i=0;$i<count($items);$i++){
if($i%4==0)
echo '</ul><ul class="floatleft">';
echo "<li>".$items[$i]."</li>";
}
echo '</ul>';

Try this:
$total = 10;
$cols = 3;
$rows = ceil($total/$cols);
echo "<table>";
for($i = 1; $i <= $rows; $i++) {
echo "<tr>";
for($j = 1; $j <= $cols; $j++) {
$value = $i + 4*($j-1);
if ($value <= $total) {
echo "<td>".$value."</td>";
}
}
echo "</tr>";
}
echo "</table>";

Related

How to break a column to fix a php table [duplicate]

This question already has answers here:
PHP: How do you determine every Nth iteration of a loop?
(8 answers)
Closed last year.
I had a little problem, i cannot break the table because I'm looking for a 16 columns in these table to create a unicode table...
The aim is to find where i must break the line of the column as like as there:
<?php
$columnas = 16;
$filas = 16;
$word= 0;
$contador = 0;
print "<table border=\"1\">\n";
print "<caption>ASCII</caption>\n";
print "<tbody>\n";
print "<tr>\n";
for ($j = 1; $j <= $columnas; $j++){
if ($j%2 == 1){
print "<th>Codigo</th>\n";
}elseif ($j%2 == 0){
print "<th>Valor</th>\n";
}
}
print "</tr>";
for ($i = 1; $i <= $filas; $i++){
for($i = 1; $i <= 50000; $i++,$contador){
$unicodeChar = "&#{$i}";
$contador--;
print "<td>" .$i. "</td>\n";
print "<td>".$unicodeChar."</td> \n";
}
print "</tr>\n";
}
print "</tbody>\n";
print "</table>\n";
?>
enter image description here
You used the modulus in the first loop, so use it again in the second
print "</tr>";
print "<tr>";
for($i = 1; $i <= 50000; $i++){
$unicodeChar = "&#{$i}";
$contador--;
print "<td>$i</td><td>$unicodeChar</td>\n";
if ( $i % $columnas/2 ) == 0 ) {
print "</tr><tr>\n";
}
}
print "</tr>\n";
Thank you very much for this help, i have been fixed!!
here is the code that i fixed, with your idea :)
´´´´
<?php
$columnas = 16;
$filas = 16;
$word= 0;
$contador = 0;
print "<table border=\"1\">\n";
print "<caption>ASCII</caption>\n";
print "<tbody>\n";
print "<tr>\n";
for ($j = 1; $j <= $columnas; $j++){
if ($j%2 == 1){
print "<th>Codigo</th>\n";
}elseif ($j%2 == 0){
print "<th>Valor</th>\n";
}
}
print "</tr>";
for ($i = 1; $i <= $filas; $i++){
print "<tr>";
for($i = 1; $i <= 50000; $i++,$contador){
$unicodeChar = "&#{$i}";
$contador--;
print "<td>" .$i. "</td>\n";
print "<td>".$unicodeChar."</td> \n";
if (($i % 8 ) == 0 ){
print "</tr><tr>";
}
}
print "</tr>\n";
}
print "</tbody>\n";
print "</table>\n";
?>
´´´´
Like Riggsfolly said but maybe divide the columns number by 2 before the modulo, because there are 2 TDs / iteration:
if ( $i % ($columnas/2) ) == 0 ) {
print "</tr><tr>\n";
}

display first set of result in row

I want to iterate an array of data using foreach loop.
However, I want the first 4 results to display two items per row.Thereafter I want the rest of the data to display I item per row
i found a possible solution here
$data = range(1, 30);
for($count = 0; $count < count($data);)
{
echo "<tr>\n";
for($i = 0; $count < count($data) && $i < 2; $count++, $i++) {
echo "\t<td>$data[$count]</td>\n";
}
for(; $i < 2; $i++) {
echo "\t<td>-</td>\n";
}
echo "</tr>\n";
}
how the problem with this code is that it displays all the data in rows of two.i however only want the first 4 results to display that way.
You can do something like this:
$data = range(1, 30);
for($count = 0; $count < count($data); ++$count){
if($count < 4){
if($count % 2 == 0){
echo "<tr><td>" . $data[$count] . "</td>";
}else{
echo "<td>" . $data[$count] . "</td></tr>";
}
}else{
echo "<tr><td>" . $data[$count] . "</td></tr>";
}
}
Here's the demo
You're using the already incremented $i variable twice.
$i is never < 2
Add this instead
for($j = 0; $j < 2; $j++) {
echo "\t<td>-</td>\n";
}
Test here
Try with -
$data = range(1, 30);
for($count = 0; $count < count($data); $count++)
{
echo "<tr>";
if($count < 2) {
for($i = 1; $i <= 2; $i++) {
echo "<td>" . $data[$count] . "</td>";
if($i == 1) {
echo "</tr><tr>";
}
}
} else {
echo "<td>" . $data[$count] . "</td>";
}
echo "</tr>";
}
What about something like this?
echo '<table border=1>';
$data = range(1, 30);
for($count = 0; $count < count($data); $count++){
echo "<tr>\n";
if($count < 4) {
echo "\t<td>$data[$count]</td>\n";
$count++;
echo "\t<td>$data[$count]</td>\n";
} else {
echo "\t<td colspan=2>$data[$count]</td>\n";
}
echo "</tr>\n";
}
echo '</table>';

Splitting MySql data in 3 columns if i have less than eight values

I want to display some data split into 3 columns. If I have more than eight values​​, then everything is working properly, but if I have less than eight values I get: Notice: Undefined offset:
How can I fix that problem?
echo '<table><tr>';
for ($i=0;$i < count($audio_fileexts) / 3; $i++) {
for ($j = 0; $j < 3; $j++){
echo $audio_fileexts[ $i + $j * 3];
}
echo '</tr><tr>';
}
echo '</tr></table>';
echo '<table>';
for ($i = 0; $i < count($audio_fileexts); $i++) {
if ($i % 3 == 0) {
if ($i > 0) {
echo '</tr>';
}
echo '<tr>';
}
echo '<td>' . $audio_fileexts[$i] . '</td>';
}
if ($i % 3 > 0) {
while ($i++ % 3 > 0) {
echo '<td></td>';
}
echo '</tr>';
}
echo '</table>';

Transform html table

Hi I have an array of movie names in alphabetical order, of which I want to create a html table of, I want to do this on the fly so I did the following:
echo "<div align=\"center\"><table>";
$i=0;
foreach ($results as $entry){
//If first in row of 4, open row
if($i == 0) {
echo "<tr>\n";
}
//print a cell
echo "\t<td>" . $entry . "</td>\n";
i++;
//if last cell in row of 4, close row
if($i == 4) {
echo "</tr>\n";
$i=0;
}
}
if($i < 4) {
while($i < 4) {
echo "\t<td></td>\n";
$i++;
}
echo "</tr>\n";
}
echo "</table></div>";
However this builds a table which looks like:
entry0 | entry1 | entry2 | entry3
entry4 | entry5 | entry6 | entry7
How can I go about building a table like:
entry0 | entry3 | entry6
entry1 | entry4 | entry7
entry2 | entry5 | entry8
?
I'm guessing I would have to reorganise my $results array and still build the table the same way?
I'm very new to php ( a week!) so I'm not really sure how to go about this
Thanks for your help
$results = array( 'e1', 'e2', 'e3', 'e4', 'e5', 'e6','e7' );
$NUM_COLUMNS = 3;
$numRows = count($results) / $NUM_COLUMNS;
if (count($results) % $NUM_COLUMNS > 0) {
$numRows += 1;
}
echo "<div align=\"center\"><table>";
$i=0;
for ($i = 0; $i < $numRows; $i++) {
echo "<tr>\n";
$index = $i;
for ($j = 0; $j < $NUM_COLUMNS; $j++) {
//print a cell
$entry = '';
if ($index < count($results)) {
$entry = $results[$index];
}
echo "\t<td>" . $entry . "</td>\n";
$index += $numRows;
}
echo "</tr>\n";
}
echo "</table></div>";
This is tested and includes sorting items vertically. I would write a description, but I just got a phone call and have to go. I will answer questions if you have any in ~1hr. (sorry!)
How about this: (I did not test, but should be OK)
<?php
$i = 1;
$max = 3; // this is the number of columns to display
echo "<div align=\"center\"><table><tr>";
foreach ($results as $entry) {
echo "<td style=\"text-align: center;\">";
echo $entry;
echo "</td>";
$i++;
if ($i == ($max)) {
echo '</tr><tr>';
$i = 1;
}
}
echo "</tr>\n";
echo "</table></div>";
?>

for loop not suitable? [duplicate]

This question already has answers here:
Two arrays in foreach loop
(24 answers)
Closed 6 months ago.
I have created a for loop.
I am trying to loop through lots of members and create a row for each member in a table.
It's looping through too many times.
Is it the right type of loop to use?
<?php
for ($i = 1; $i = count($u); $i++)
{
?>
<tr>
<?php
echo "<td>$i</td>";
?>
<?php
foreach ($u as $username)
{
echo "<td>$username</td>";
}
?>
<?php
foreach ($p as $points)
{
echo "<td>$points</td>";
}
?>
</tr>
<?
}
?>
$u and $p are arrays.
Thanks
You can shorten it a bit and remove the inner loops:
<php
for ($i = 1; $i <= count($u); $i++)
{
echo '<tr>';
echo "<td>$i</td>";
echo "<td>$u[$i]</td>";
echo "<td>$p[$i]</td>";
echo '</tr>';
}
?>
$i = count($u) in the loop is what's causing the problem:
for ($i = 1; $i = count($u); $i++)
On every iteration of the loop, you're assigning count($u) to $i using a single =. Should be
for ($i = 1; $i <= count($u); $i++)
or
for ($i = 0; $i < count($u); $i++)
<?php
$count = count($u);
for ($i = 1; $i < $count; $i++) {
echo '<tr>';
echo '<td>' . $i . '</td>';
foreach ($u as $username) {
echo '<td>' . $username . '</td>';
}
foreach ($p as $points) {
echo '<td>' . $points . '</td>';
}
echo '</tr>';
}
?>
You should count $u before you loop it.

Categories