Leeres Array ausgeben

Spelmann

Erfahrenes Mitglied
Hallo,
ich habe ein Problem mit leeren Arrays.
Ich habe folgenden Datensatz:
Code:
Zeit|Palette 1|Palette 2|Palette 3
11:30 Uhr|Bananen||
12:00 Uhr||Erdbeeren|
12:30 Uhr|||Kirschen
13:00 Uhr|Bananen||
13:30 Uhr||Erdbeeren|
14:00 Uhr|||
Den möchte ich nun per PHP ausgeben:
PHP:
$dateihandle = fopen("fruechte.txt","r");

while($counter < 10){
	$zeile = fgets($dateihandle, 100);
	$zeile = explode("|", $zeile);
	$zeile = str_replace("", "&nbsp;", $zeile);
	foreach($zeile as $eintrag)
  	echo "<div style='float:left; width:150px; display:inline-block; background-color:red'>".$eintrag."</div>";
	echo "<br />";
	$counter++;
	}
Leider werden nun aber die Variable $eintrag in der foreach Schleife als gar nicht vorhanden betrachtet, wenn das Array aus explode leer ist. Dadurch verschieben sich die Datensätze in der Darstellung.
Kann mir jemand sagen, was ich machen muß, daß auch ein leeres Array die Ausgabe des div Containers erzeugt?

Vielen Dank
 
Zuletzt bearbeitet:
Mache den Array doch voll, falls er leer ist :
Code:
$zeile = fgets($dateihandle, 100);
    if(empty($zeile)){$zeile='|||';}
    $zeile = explode("|", $zeile);
 
Nein das geht nicht. Ich habe mich wahrscheinlich nicht klar ausgedrückt. Es ist ja nicht wirklich das ganze Array leer. Ich versuche es nochmal so zu beschreiben.
Wenn das TXT File so aussieht funktioniert es nicht:
Code:
Zeit|Palette 1|Palette 2|Palette 3
11:30 Uhr|Bananen||
12:00 Uhr||Erdbeeren|
12:30 Uhr|||Kirschen
13:00 Uhr|Bananen||
13:30 Uhr||Erdbeeren|
14:00 Uhr|||
Wenn zwischen den Trennzeichen ein Inhalt wäre, funktionierts:
Code:
Zeit|Palette 1|Palette 2|Palette 3
11:30 Uhr|Bananen|&nbsp;|&nbsp;
12:00 Uhr|&nbsp;|Erdbeeren|&nbsp;
12:30 Uhr|&nbsp;|&nbsp;|Kirschen
13:00 Uhr|Bananen|&nbsp;|&nbsp;
13:30 Uhr|&nbsp;|Erdbeeren|&nbsp;
14:00 Uhr|&nbsp;|&nbsp;|&nbsp;
So bekomme ich das TXT File aber nicht. Wie kann ich es aber nun erreichen, das die Variable auch dann in das Array geschrieben wird wenn sich zwischen den Trennern nichts befindet. So wie oben gezeigt. Nach dem explode Befehl die Variable zu ersetzen funktioniert auch nicht. Weder mit ereg_replace() noch mit str_replace().
PHP:
$zeile = explode("|", $zeile);
if(empty($zeile)) $zeile = "&nbsp;"
//Tut ebenfalls nichts
 
PHP:
<?php

	$String = '1|2||4';
	$Array = explode('|', $String);
	foreach($Array as $Eintrag) {
		echo "Eintrag: ". $Eintrag;
		echo "<br />";
	}
	
?>
Funktioniert bei mir wunderbar ... :confused:

Code:
Eintrag: 1
Eintrag: 2
Eintrag:
Eintrag: 4
 
Wenn du etwas mit explode trennst, dann kommt da ein Array raus. Teilweise behandelst du die Variable aber "normal" weiter und gar nicht die einzelnen Felder. Du solltest also zum Beispiel wenn du leere Felder mit einem Leerzeichen füllen willst zum Beispiel mit foreach das Ganze durchlaufen. Foreach hast du ja zum beispiel auch in deinem ersten Post und die Zeile, wo das ersetzen stattfindet, solltest du da mit reinbringen. Dann sollte das Ganze auch laufen.
 
Mir ward bei phpforum.de geholfen.
Das Problem lag tatsächlich nicht bei PHP sondern bei dem Irrglauben, daß ein DIV bei fixer Höhen- und Breitenangabe und display-inline auch ohne Inhalt angezeigt wird.
Eine kleine Änderung im CSS brachte den gewünschten Erfolg:
PHP:
echo "<div style='float:left; width:150px; display:inline-block; background-color:red'>&nbsp;".$eintrag."</div>";
 
Aber in deinem Fall setzt du jetzt ja immer ein Leerzeichen vor den Eintrag. Ist das gewollt? Schöner ist es doch, wenn das nur da ist, wenn kein Wert eingetragen ist.
 
Ich verstehe auch nicht so ganz, warum nicht einfach eine Tabelle dargestellt wird. Das sind immerhin tabellarische Daten ...
 
Habt ihr beide recht.
In den Bemühungen CSS Basiert zu gestalten ist es wohl dumm auch bei tabellarischen Daten auf Tabellen zu verzichten.
 
Zurück