Array in Tabelle mit festgelegter Spaltenzahl pro Zeile ausgeben

Html

Erfahrenes Mitglied
Hallo, bin momentan dabei mich etwas in PHP einzulesen. Habe auch schon einige einfache Grundbeispiele ausprobiert.

Nun möchte ich gerne den Inhalt eines arrys in einer Tabelle ausgeben. Und zwar immer nur zwei Spalten pro Zeile. Das funktioniert auch schon. Nur wenn ich 5 Einträge in meinem Array habe, soll die letze Tabellenspalte ein   erhalten.

Hier ist mein code:

PHP:
<?php

$blumen = array ("Rose", "Tulpe", "Nelke", "Sonnenblume", "Veilchen");
$anzahl = count ($blumen);


echo "<table border=\"1\" >";
echo "<tr>";


for ($i = 0; $i <= $anzahl-1; $i++)
	{


	echo "<td>", $blumen[$i], "</td>";
	$spalten++;

if ( $spalten == 2 )
	{
	
	echo "</tr>";
	$spalten = 0;
	
	if ( $i < $anzahl-1)
		{
		echo "<tr>";
		}
	
	}
	}

echo "</table>";


?>

Ach und nochwas, ist der code ok oder geht das ganze auch einfacher. Wie gesagt, bin Neuling und probiere im Moment bisschen aus ( Learning by Doing).

mfg,Olli
 
Der Code ist ok gibt halt mehrere Varianten z.b. foreach
PHP:
$i = 0;
echo '<table><tr>'
foraech ($blumen as $value)
{
  if ($i % 2 == 0) echo '</tr><tr>'  // Zeile schließen, öffnen
  echo '<td>'.$value.'</td>';
}
echo '</tr></table>'

mfg
 
Also habe jetzt folgenden code:

PHP:
<?php

$blumen = array ("Rose", "Tulpe", "Nelke", "Sonnenblume", "Veilchen", "test", "Oliver");
$anzahl = count ($blumen);
$spaltenzahl = 2;

echo "<table border=\"1\"><tr>";
   $i=0;
   foreach ($blumen as $blub){
     if($i % $spaltenzahl == 0) echo "</tr><tr>";
     echo "<td>".$blub."</td>";
    $i++;
    }
 echo "</tr></table>"

?>

Meine erste Frage: Was bedeutet "$i % $spaltenzahl". Zählt das %_zeichen auch als Division?

2. Nun wird aber immer noch kein &nbsp; bei einer leeren Tabellenspalte eingefügt.
Und zwar habe ich ja fünf Element im array, d.h es werden 2 zeilen mit 2 spalten und die letzte zeile mit einer Spalte erzeugt. Nun soll aber auch die letzte Zeile zwei Spalten bekommen und in die leere ein &nbsp; eingefügt werden.

Ist das möglich oder ist es aber auch Code-Technisch überhaupt nicht nötig?


mfg,Olli
 
Ah, danke.

Nur jetzt ist mir aufgefallen das wenn ich $i=0 setze die Tabelle so aussieht:

siehe Bild


Ich möchte aber gern das die Tabelle von links nach rechts gefüllt wird, kurz gesagt soll bei 5 Elementen und 2 Spalten die untere rechte Spalte leer sein.

Wie ist das möglich.? Wenn ich $i=1 setze dann sieht es zwar so aus, aber es wird noch eine leere zeile ganz oben eingefügt.

mfg,Olli
 

Anhänge

PHP:
<?php

function tableFromArray($arr,$cols,$mt)
{
  $return='<table border="1">';
  while(count($arr)%$cols!=0)
    {
      array_push($arr,$mt);
    }
  while(count($arr)>0)
    {
      $return.="\n<tr><td>".implode('</td><td>',array_splice($arr,0,$cols)).'</td></tr>';
    }

  $return.='</table>';
  return($return);
}

$blumen = array ("Rose", "Tulpe", "Nelke", "Sonnenblume", "Veilchen", "test", "Oliver"); 

echo tableFromArray($blumen,2,'&nbsp;');

?>
 
Danke für den code. Funktioniert zwar aber habe das ganze noch etwas anders gelöst:

PHP:
<?php

$blumen = array ("Rose", "Tulpe", "Nelke", "Sonnenblume", "Veilchen", "test", "Oliver","Rose", "Tulpe", "Nelke", "Sonnenblume", "Veilchen", "test", "Oliver","Tulpe");
$anzahl = count ($blumen);
$spaltenzahl = 2;
$i=0;

 while(count($blumen)%$spaltenzahl!=0)
    {
      array_push($blumen,"&nbsp;");
    } 

echo "<table border=\"1\">\n<tr>";

   
   foreach ($blumen as $blub)
   		{
     		if($i % $spaltenzahl == 0 and $i != 0) 
			{
			echo "</tr>\n<tr>\n";
     		}
			echo "<td>\n".$blub."</td>\n";
    		$i++;
    }
	
echo "</tr></table>"

?>

mfg,Olli
 
Zurück