str_replace und Zeilenumbruch

arraybreak

Erfahrenes Mitglied
Abend zusammen,

ich kämpfe schon seit langem mit Zeilenumbruch und str_replace, komme aber nicht auf die Lösung.
Mit explode will ich erreichen dass die ";" durch einen Leerzeichen ersetzt werden, damit meine Tabelle mit werten gefüllt wird und jede Spalte weiß was sie für Wert hat, was auch wunderbar klappt. Mit str_replace will ich die "#" durch einen Zeilenumbruch ersetzen damit in meiner Tabelle neue Zeile beginnt und mit Werten gefüllt wird.

Also das Zeilenumbruch "\r\n" wird in der Tabelle nicht angezeigt, also nehme ich an dass dieses Befehl irgend verstanden wird aber es kommt leider zu keinem Zeilenumbruch :(

hier mein Code:
PHP:
function LoadData1() {
		  		  
 $lines = array("2013;240;136;376;1000;1376;47#2014;360;204;564;;1940;147#2015;360;204;564;;2504;280#");
 $data = array();
 foreach($lines as $line)		 		  

 $bbb = str_replace("#","\r\n",$line);
		  
 $data[] = explode(";",trim($bbb)); 

return $data;
		}
 
Hallo arraybreak,

mit "\r\n" erstellst du nur einen Zeilenumbruch im Quelltext.
  • \n - Ein Zeilenumbruch
  • \r - Ein benötigtes Zeichen um mit \n ein Zeilenumbruch
    in Windowsdateien zu ermöglichen
Willst du das "\r\n" für HTML umgesetzt wird musst du es mit
nl2br zu einem "<br />" umwandeln oder du ersetzt gleich
PHP:
$bbb = str_replace("#","\r\n",$line);
durch
PHP:
 $bbb = str_replace("#","<br />\r\n",$line);
 
@Psychomentis: Danke für deine Antwort, aber mit "<br />" funktioniert es nicht, da es keine HTML-Tabelle ist.
Es geht um "FPDF", also es wird eine PDF-Datei erstellt und da funktioniert kein HTML.

Ich poste dir mal den Code für die Tabelle, vielleicht kannst du (wenn du Lust hast) damit was anfangen:

PHP:
    // Colors, line width and bold font
	$this->SetXY(20, 165); 
    $this->SetFillColor(177,200,0);
    $this->SetTextColor(0);
    $this->SetDrawColor(150);
    $this->SetLineWidth(.1);
    $this->SetFont('','B');
	
    // Header
    $w = array(15, 20, 30, 25, 30, 30, 20);
    for($i=0;$i<count($tbheader);$i++)
        $this->Cell($w[$i],6,utf8_decode($tbheader[$i]),1,0,'C',true);
    $this->Ln();
	
    // Color and font restoration	 
    $this->SetFillColor(240);
    $this->SetTextColor(0);
    $this->SetFont('');
	$this->SetX(20);

    // Data
    $fill = false;
    foreach($data as $row) {
		$this->SetX(20);
        $this->Cell($w[0],5,$row[0],'LR',0,'C',$fill);
        $this->Cell($w[1],5,$row[1],'LR',0,'R',$fill);
        $this->Cell($w[2],5,$row[2],'LR',0,'R',$fill);
        $this->Cell($w[3],5,$row[3],'LR',0,'R',$fill);
		$this->Cell($w[4],5,$row[4],'LR',0,'R',$fill);
		$this->Cell($w[5],5,$row[5],'LR',0,'R',$fill);
		$this->Cell($w[6],5,$row[6],'LR',0,'R',$fill);
        $this->Ln();
        $fill = !$fill;
    }
    // Closing line
	$this->SetX(20);
    $this->Cell(array_sum($w),0,'','T');
	
	// Footer
	$this->SetXY(20, 221);
    $this->SetFillColor(177,200,0);
    $this->SetTextColor(0);
    $this->SetDrawColor(150);
    $this->SetLineWidth(.1);
    $this->SetFont('','B');
    $w2 = array(15, 20, 30, 25, 30, 30, 20);
    for($i=0;$i<count($tbfooter);$i++)
        $this->Cell($w2[$i],6,utf8_decode($tbfooter[$i]),1,0,'C',true);
    $this->Ln();
 
Hallo,

kann es sein, dass es am trim() liegt? Das entfernt da \r\n am Ende der Zeile.

Wie genau willst du deine Tabelle im PDF aufgebaut haben? Kann es ein, das # das Ende einer jeden Zeile innerhalb der Tabelle sein soll?

Kurz gesagt, ich glaube, das folgender Code besser funktioniert:

PHP:
function LoadData1() {
	$everything = "2013;240;136;376;1000;1376;47#2014;360;204;564;;1940;147#2015;360;204;564;;2504;280#";
	// Erstmal anhand # in Zeilen aufspalten
	$lines = explode('#', $everything);

	$data = array();
	foreach($lines as $line) {
		if(strlen($line))
			$data[] = explode(";",trim($line));
	}

	return $data;
}
 
@saftmeister: Das "trim" habe ich entfernt, nutzt aber nichts.

Bei "#" soll halt Zeilenende sein und neue Zeile mit den anderen Werten beginnen, das funktioniert aber gerade nicht, und ich habe ehrlich keine Ahnung wie ich das anstellen soll :(

Habe jetzt deinen Vorschlag versucht, funktioniert leider nicht, er gibt mir garnichts mehr aus
PHP:
function LoadData1() {		  		  
$everything = array("2013;240;136;376;1000;1376;47#2014;360;204;564;;1940;147#2015;360;204;564;;2504;280#");
$lines = explode('#', $everything);
 $data = array();
foreach($lines as $line)	{     
		if(strlen($line))	 		  
		  
			  $data[] = explode(";",trim($line)); 

		  }
		  return $data;
		}
 
@saftmeister: Danke, werde es abends versuchen, muss gleich leider zur Arbeit, vielleicht bist du abends auch da, dann kann ich dir ja mehr berichten ;)
 
Zurück