• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

String ordnen

blabla333

Mitglied
Ich habe einen String, welcher aus mehreren Zeilen besteht. Diese möchte ich alphabetisch ordnen und als Liste ausgeben.

PHP:
$string = "Tomaten\nGurke\nApfel\nBirnen";
(der String selbst wird aus einer Datenbank bzw. einem Text-Feld ausgelesen, deshalb sind Zeilenumbrüche möglich)

soll dann ausgegeben werden als

HTML:
<ol>
<li>Apfel</li>
<li>Birnen</li>
<li>Gurke</li>
<li>Tomaten</li>
</ol>
 
1. String in ein Array umwandeln, dabei den Zeilenumbruch als Trenner nutzen.
2. Das sortierte Array als Liste ausgeben

PHP:
$str = 'Tomaten\nApfel\nBirnen';
// String in ein Array umwandeln
$arr = explode('\n', $str);
// Array sortieren
sort($arr);
// Liste ausgeben
echo '<ol>';
foreach ($arr as $key => $val) {
    echo '<li>'.$val.'</li>';
}
echp '</ol>';
 
Vielleicht ist mein vorgegebenes "\n" auch nicht korrekt:

Mein String wird wie gesagt aus einem Textfeld einer SQL-Tabelle ausgelesen. In diesem habe ich verschiedene Zeilen hinterlegt. Jetzt dachte ich, dass ein Zeilenumbruch durch \n gekennzeichnet wird. Wenn ich den eingelesenen String einfach ausgebe, dann sehe ich im Quelltext, dass die Zeilenumbrüche weiterhin vorhanden ist.

explode('\n', $str); funktioniert aber nicht. Muss ich das anders trennen?
 
PHP:
$str2 = nl2br($str);$arr = explode('<br />', $str2);

So funktioniert es. Aber ist das nicht unnötig kompliziert? Muss ich das wirklich zwei mal umwandeln, nur um letztlich sortieren zu können?

Außerdem scheint es nicht korrekt zu sortieren:

Jörn
Adam
Stein
Rene

Wird zu

1. Adam
2. Rene
3. Stein
4. Jörn


???
 
Zuletzt bearbeitet:
Das
PHP:
$arr = explode('\n', $str);
ist falsch, so geht's:
PHP:
$arr = explode("\n", $str);
 
Thx bdt600,

um diese Uhrzeit dachte ich nicht mehr an den kleinen aber feinen Unterschied in Bezug auf Steuerzeichen.
 
Super. Danke!
Aber ich verstehe nicht den Unterschied. Für mich war das immer gleich. (' und ")

In Bezug auf Steuerzeichen (\n, \t .....) gibt es da schon einen Unterschied beim Einsatz von Quotes.
Werden Single-Quotes genutzt, dann werden Steuerzeichen welche im String enthalten sind nicht beachtet.
 
Edit: falsch gelesen. So ist richtig:

PHP:
$string = "Tomaten\nGurke\nApfel\nBirnen";
$parts = explode("\n", $string);
sort($parts);
$string = '<ol><li>'.implode("</li>\r\n<li>", $parts).'</li></ol>';
 
Zurück
Oben