Zweispaltiger Text

Zweispaltiger Text ist mittels PHP kein Problem, denn man kann sich die Länge des Textes ausgeben lassen und dann den Text in 2 gleichlange Teile teilen. Ganz so einfach ist es jedoch nicht, denn man will ja nicht, dass der Text mitten in einem Wort geteilt wird.

<?php

$gesamtText="Ut labore et dolore magn.....";
$gesamtLaenge=strlen($gesamtText);
$mitte=strpos($gesamtText," ",floor($gesamtLaenge/2));
$text1=substr($gesamtText,0,$mitte);
$text2=substr($gesamtText,$mitte,$gesamtLaenge-$mitte);

?>

strlen($meinText) übergibt mir die Länge des Textes. Wenn die Länge des Textes eine ungerade Zahl ist, wäre die Hälfte des Textes keine Ganzzahl, deswegen wird im folgenden die Hälfte abegrundet mittels floor()
floor($gesamtLaenge/2)
Nun möchte ich jedoch, dass der Text nicht mitten in einem Wort geteilt wird, also suche ich ab der halben Länge das nächste Leerzeichen. Mittels strpos() kann man nach einer Teilzeichenfolge innerhalb eines Strings suchen. Die 3 Parameter sind 1.) der Text, 2.) die Zeichenfolge nach der gesucht werden soll 3.) ab welcher Position gesucht werden soll, dabei steht 0 für das erste Zeichen. Wenn der erste Teil nach einem Satz enden soll, suche ich einfach nach dem nächsten Punkt, wenn er nach dem nächsten Wort geteilt werden soll suche ich nach dem nächsten Leerzeichen.
$mitte=strpos($gesamtText," ",floor($gesamtLaenge/2))+1;
Außerdem wird der Wert noch um 1 erhöht, dann braucht man es in den folgenden Funktionen nicht zu machen.
Es folgt das Erzeugen einer Teilzeichenfolge mittels substr() Die 3 Parameter sind: 1.)der Text, 2.)die Position des ersten Zeichens beginngend bei 0 und 3.) die Länge der Teilzeichenfolge. Deswegen die Erhöhung der Mitte um 1. Bei dem Leerzeichen ist es in Html noch nicht so schlimm, aber wenn ich beispielsweise nach dem Punkt gesucht hätte, damit der erste Teil mit einem Satz endet, und die $mitte nicht um 1 erhöht würde, würde der zweite Teil mit dem Punkt anfangen und der erste Teil vor dem Punkt enden.

Hier habe ich den Text in 2 Tabellenspalten eingefügt, damit das Beispiel möglichst einfach und übersichtlich bleibt. Selbstverständlich kann man das auch nebeneinander angeordneten Div Tags einfügen.

Ut labore et dolore magna aliqua. In reprehenderit in voluptate duis aute irure dolor sunt in culpa. Ullamco laboris nisi velit esse cillum dolore cupidatat non proident. Consectetur adipisicing elit, qui officia deserunt duis aute irure dolor. In reprehenderit in voluptate excepteur sint occaecat sunt in culpa. Lorem ipsum dolor sit amet, ut aliquip ex ea commodo consequat. Sed do eiusmod tempor incididunt quis nostrud exercitation. Velit esse cillum dolore consectetur adipisicing elit, quis nostrud exercitation. Lorem ipsum dolor sit amet, eu fugiat nulla pariatur. Sunt in culpa ut aliquip ex ea commodo consequat. Ullamco laboris nisi consectetur adipisicing elit, excepteur sint occaecat.

 

Eine Funktion, die zweispaligen Text erzeugt

Um diese Funktionalität in einer Funktion einzubetten benötigen wir eine Funktion, die 2 Werte zurückgibt, das lässt sich über ein Array bewerkstelligen.

123456

<?php
function testreturn (){
$Daten[0] = 123;
$Daten[1] = 456;
return $Daten;
}
$Werte = testreturn();

echo $Werte[0];
echo $Werte[1];
?>

 

Es folgt nun die Funktion, die als Paramter den Text erwartet der als zweispaltiger Text angezeigt werden soll.

<?php

function zweiSpalten($fullText){
$gesamtLaenge=strlen($fullText);
$mitte=strpos($fullText,".",floor($gesamtLaenge/2))+1;
$derText[0]=substr($fullText,0,$mitte);
$derText[1]=substr($fullText,$mitte,$gesamtLaenge-$mitte);
return $derText;
}

$textblock = zweiSpalten($gesamtText);
?>

<table width="50%" border="0" cellpadding="5">
<tr>
<td><?php echo $textblock[0]?></td>
<td><?php echo $textblock[1]?></td>
</tr>
</table>

 

Ut labore et dolore magna aliqua. In reprehenderit in voluptate duis aute irure dolor sunt in culpa. Ullamco laboris nisi velit esse cillum dolore cupidatat non proident. Consectetur adipisicing elit, qui officia deserunt duis aute irure dolor. In reprehenderit in voluptate excepteur sint occaecat sunt in culpa. Lorem ipsum dolor sit amet, ut aliquip ex ea commodo consequat. Sed do eiusmod tempor incididunt quis nostrud exercitation. Velit esse cillum dolore consectetur adipisicing elit, quis nostrud exercitation. Lorem ipsum dolor sit amet, eu fugiat nulla pariatur. Sunt in culpa ut aliquip ex ea commodo consequat. Ullamco laboris nisi consectetur adipisicing elit, excepteur sint occaecat.