Funktion gesucht
Pit
- php
Hallo,
ich möchte in php aus einem String:
Peter, Tom, Chris, Hans
folgenden String machen:
'Peter','Tom','Chris','Hans'
und auch aus:
Peter
'Peter'
zugleich soll der String, so er denn leer ist, auch nach dem Behandeln leer sein, also nicht z.b. '' daraus werden.
Wie mache ich das am effizientesten?
Pit
Hallo
ich möchte in php aus einem String:
Peter, Tom, Chris, Hans
folgenden String machen:
'Peter','Tom','Chris','Hans'
Teiloe die Zeichenkette mit explode
an den Kommata …
und auch aus:
Peter
'Peter'
… und fasse die einzelnen Zeichenketten in '
ein.
zugleich soll der String, so er denn leer ist, auch nach dem Behandeln leer sein, also nicht z.b. '' daraus werden.
Prüfe mit empty
, ob die Variable oder die Arrayelemente leer sind. Nur, wenn sie nicht leer sind, führe die vorher angesprochenen Schritte aus.
Tschö, Auge
Hallop Auge,
… und fasse die einzelnen Zeichenketten in
'
ein.
Auch hier: Ich weiß nicht, wie ich das mache.
Prüfe mit
empty
, ob die Variable oder die Arrayelemente leer sind. Nur, wenn sie nicht leer sind, führe die vorher angesprochenen Schritte aus.
Darf man empty() auch auf Arrays anwenden? Ich zähle bisher immer die Elemente…
Pit
Hallo
… und fasse die einzelnen Zeichenketten in
'
ein.Auch hier: Ich weiß nicht, wie ich das mache.
Stichworte: „Stringverkettung“ oder „String Concatenation“
Prüfe mit
empty
, ob die Variable oder die Arrayelemente leer sind. Nur, wenn sie nicht leer sind, führe die vorher angesprochenen Schritte aus.Darf man empty() auch auf Arrays anwenden?
Ja, das darf man. Das nützt dir in deiner Aufgabenstellung aber nichts. Du willst wissen, ob eines der Arrayelemente eine leere Zeichenkette ist, nicht, ob das Array als ganzes leer ist.
Ich zähle bisher immer die Elemente…
Dann weißt du aber nur, wie viele Elemente das Array hat. Ob eines davon leer ist, weißt du so nicht.
$stringNamen = 'Peter, Tom, Chris,, Hans'; # beachte die beiden Kommata hinter Chris
$arrayNamen = explode(',', $stringNamen); # zerlege den String, Trennzeichen ist das Komma
# var_dump gibt die Elemente der Variable mit Typ und Inhalt aus
# zwischen Chris und Hans wird ein leeres Arrayelement vorhanden sein
var_dump($arrayNamen);
foreach ($arrayNamen as $name) {
# bearbeite das Arrayelement nur, wenn es nicht leer ist
if (!empty($name)) {
# fasse den Namen in Anführungszeichen ein
}
}
Tschö, Auge
Tach!
ich möchte in php aus einem String:
Peter, Tom, Chris, Hans
folgenden String machen:
'Peter','Tom','Chris','Hans'
Explodieren am Komma, oder Komma plus Leerzeichen, vielleicht mit preg_split(), da kann man das Leerzeichen optional machen. Dann implodieren mit ','
als Glue und in '
einrahmen.
und auch aus:
Peter
'Peter'
Klappt damit auch.
zugleich soll der String, so er denn leer ist, auch nach dem Behandeln leer sein, also nicht z.b. '' daraus werden.
Hmm, diese Ausnahme kannst du hinterher finden, wenn '' das Ergebnis ist, dann durch Leerstring austauschen. Oder nach dem Explode testen, ob das Array leer ist und dann abbrechen.
dedlfix.
Hi dedlfix,
Explodieren am Komma, oder Komma plus Leerzeichen, vielleicht mit preg_split(), da kann man das Leerzeichen optional machen. Dann implodieren mit
','
als Glue und in'
einrahmen.
Habe mir schon gedacht, dass das auf einen ex- und einen implode hinausläuft, aber ich weiß nicht, wie ich das Einrahmen in die ' machen muß.
Pit
Habe mir schon gedacht, dass das auf einen ex- und einen implode hinausläuft, aber ich weiß nicht, wie ich das Einrahmen in die ' machen muß.
Ah, gerade gefunden:
<?php
$a1 = array("1","2","3");
$a2 = array("a");
$a3 = array();
echo "a1 is: '".implode("','",$a1)."'<br>";
echo "a2 is: '".implode("','",$a2)."'<br>";
echo "a3 is: '".implode("','",$a3)."'<br>";
?>
will produce:
===========
a1 is: '1','2','3'
a2 is: 'a'
a3 is: ''
Pit
Tach!
Habe mir schon gedacht, dass das auf einen ex- und einen implode hinausläuft, aber ich weiß nicht, wie ich das Einrahmen in die ' machen muß.
$result = "'" . implode("','", $exploded_array) . "'";
dedlfix.
Hallo dedlfix,
schlaue Idee, ich hätte jeden einzelnen Teilstring mit array_map oder einer for-Schleife in Hochkommata eingerahmt.
Aber eine gewisse innere Verarbeitung braucht man doch, denn Pit möchte ja folgendes NICHT:
«Apfel , Pflaume, Birne» --> «'Apfel ',' Pflaume',' Birne'»
sondern
«Apfel , Pflaume, Birne» --> «'Apfel','Pflaume','Birne'»
Dafür würde ich array_map vorschlagen wollen, das spart die eigene Schleife.
function putInQuotes($list) {
if (trim($list) == "") return $list;
return "'".
implode(array_map(function($p) { return trim($p); },explode(",", $list)),"','").
"'";
}
Wem die Schachtelung der Funktionsaufrufe zu wüst ist, hier die Version mit Temp-Veriablen und Kommmentaren
function putInQuotes($list) {
if (trim($list) == "") return $list;
// String an den Kommata auftrennen
$parts = explode(",", $list);
// Die einzelnen Teile mit trim() von Rand-Leerstellen befreien
$quotedParts = array_map(function($x) { return trim($x) }, $parts);
// Mit Hochkommas wieder zusammensetzen
return "'".implode($quotedParts, "','")."'";
}
Rolf
Tach!
Aber eine gewisse innere Verarbeitung braucht man doch, denn Pit möchte ja folgendes NICHT:
«Apfel , Pflaume, Birne» --> «'Apfel ',' Pflaume',' Birne'»
sondern
«Apfel , Pflaume, Birne» --> «'Apfel','Pflaume','Birne'»
preg_split() existiert und hab ich auch statt explode() vorgeschlagen. Nimmst du \s*,\s*
als Suchmuster für den Split und erledigt ist der Fall mit dem Trimmen.
dedlfix.
@@Pit
Ist man hier nicht mit einem regulären Ausdruch am besten dran?
$s1 = 'Peter, Tom, Chris, Hans';
$s2 = preg_replace('/([, ]*)([^,]+)/', '$1\'$2\'', $s1);
LLAP 🖖