strstr, Problem, schneiden alles weg weg kein Zeichen da ist
Sascha
- php
0 Felix Riesterer0 Tom0 dedlfix3 ChrisB0 Tabellenkalk
Ich möchte einen String ab einer bestimmten länge abschneiden.
$sting='hallo was ist # da los';
strstr($string, '#', true)
das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?
Sascha
Lieber Sascha,
$sting='hallo was ist # da los';
strstr($string, '#', true)
[...] nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?
Du kannst das verhindern, indem Du vorher nachzählst, wieviele # im String vorkommen. Nur wenn es mehr als 0 sind, benutzt Du Deinen obigen Code.
Liebe Grüße,
Felix Riesterer.
Hallo,
Du kannst das verhindern, indem Du vorher nachzählst, wieviele # im String vorkommen. Nur wenn es mehr als 0 sind, benutzt Du Deinen obigen Code.
oder alternativ, ob überhaupt eins vorkommt.
vg ichbinich
Lieber ichbinich,
oder alternativ, ob überhaupt eins vorkommt.
und Du glaubst, dass der OP bei seinem jetzigen Wissensstand den Unterschied zwischen 0 und false korrekt prüfen kann? Auch wenn nach dem vom OP beschriebenen Szenario das gesuchte Zeichen kaum am Anfang stehen wird...
Liebe Grüße,
Felix Riesterer.
Hello,
Ich möchte einen String ab einer bestimmten länge abschneiden.
$sting='hallo was ist # da los';
strstr($string, '#', true)
das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?
Alternativ kannst Du auch explode() benutzen
http://de2.php.net/manual/en/function.explode.php
und nicht nach sting, sondern nach springsteen suchen :-)
Je nachdem, ob Du nun nur den Teil ab dem letzten Vorkommen des Suchzeichens oder ab der ersten Position, o. auch anders, haben willst, nimmst Du entsprechend viele Arrayelemente des Ergebnisarrays wieder hinzu.
mit array_pop() kannst Du den Teil nach dem letzten Vorkommen, respektive den gesamten String, wenn das Zeichen gar nicht vorkam, erwarten.
http://de2.php.net/manual/en/function.array-pop.php
Wenn Du array_shift() auf das Ergebnisarray anwendest
http://de2.php.net/manual/en/function.array-shift.php
hast Du den Stringteil _vor_ dem ersten Vorkommen.
Wenn Du dem Ergebnisarray mit array_shift() das erste Element klaust und in den Mülleimer schmeißt, den Rest des Ergebnisarrays dann mit implode() wieder zusammenbaust, erhältst
Du den String _nach_ dem ersten Vorkommen,
http://de2.php.net/manual/en/function.implode.php
usw.
---------#----------#----------#----------
$teile = explode('#', $string);
[---------] [----------] [----------] [----------]
$ende = array_pop($teile);
----------
[---------] [----------] [----------] [----------]
[$trash = ] array_pop($teile);
[---------] [----------] [----------]
$vor_dem_letzten = implode('#', $teile);
---------#----------#----------
[---------] [----------] [----------] [----------]
$anfang = array_shift($teile);
---------
[---------] [----------] [----------] [----------]
[$trash = ] array_shift($teile);
[----------] [----------] [----------]
$nach_dem_ersten = implode ('#',$teile);
----------#----------#----------
Du siehst, dass man für die Teilung von Zeichenketten mit explode und den Array-Funktionen
* array_pop()
* array_shift()
* implode
eine Menge erreichen kann.
Denke nur vorher immer darüber nach, ob _Zeichenzählung_ in Frage kommt, denn dann muss sofort die Warnlampe für die Frage: Single-Byte-Codierung oder Multi-Byte-Codierung (z. B. UTF-8)? aufleuchten!
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Tach!
Ich möchte einen String ab einer bestimmten länge abschneiden.
$sting='hallo was ist # da los';
strstr($string, '#', true)
das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?
Wenn das # nicht gefunden wird, ist das Ergebnis false. Damit liefert
strstr($string, '#', true) or $string;
den gesuchten Teil oder alles. Wenn der Teilstring auch ein Leerstring oder '0' sein kann, dann braucht der Teil vor dem or einen expliziten Test auf false
(strstr($string, '#', true) === false) or $string;
Das äußere Klammernpaar ist nicht notwendig, verdeutlicht aber was zusammengehört.
dedlfix.
Hi,
Ich möchte einen String ab einer bestimmten länge abschneiden.
$sting='hallo was ist # da los';
strstr($string, '#', true)
das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?
Kurz Hirn benutzen: Indem du, egal ob eins drin ist oder nicht, ein # hinten dran hängst …
strstr($string . '#', '#', true)
MfG ChrisB
Lieber ChrisB,
Kurz Hirn benutzen: [...]
+1
Liebe Grüße,
Felix Riesterer.
Hallo,
$sting='hallo was ist # da los';
...
Kurz Hirn benutzen: Indem du, egal ob eins drin ist oder nicht, ein # hinten dran hängst …
strstr($string . '#', '#', true)
im Prinzip schöne Idee, das Ergebnis ist dann aber "# da los#". Man muss dann das # wieder abschneiden.
Gruß
Kalk
Tach!
$sting='hallo was ist # da los';
strstr($string . '#', '#', true)
im Prinzip schöne Idee, das Ergebnis ist dann aber "# da los#". Man muss dann das # wieder abschneiden.
Ja, aber nur, wenn man nicht true sondern false als dritten Parameter angibt.
dedlfix.
Hallo,
Ja, aber nur, wenn man nicht true sondern false als dritten Parameter angibt.
hrmpf, da war ich wohl zu voreilig. :(
Gruß
Kalk
Hello,
Hallo,
Ja, aber nur, wenn man nicht true sondern false als dritten Parameter angibt.
hrmpf, da war ich wohl zu voreilig. :(
Den Parameter gibt's ja auch erst seit PHP Version 5.3.0
Ist also noch recht frisch.
Solche Änderungen bekommt man nicht unbedingt gleich mit.
Das bringt mich zu einer Frage:
Die Änderungsprotokolle sind mir immer zu mühselig, obwohl man sie eigentlich lesen müsste.
Aber gibt es vielleicht eine Liste der Funktionen mit Angabe, ob sich darin etwas geändert hat?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Tach!
Die Änderungsprotokolle sind mir immer zu mühselig, obwohl man sie eigentlich lesen müsste.
Aber gibt es vielleicht eine Liste der Funktionen mit Angabe, ob sich darin etwas geändert hat?
Hmm, hab ich dir das nicht neulich schon mal geantwortet? Im PHP-Handbuch gibts im Anhang die Migrations-Abschnitte. Da ist alles in gut lesbarer Form aufgeführt.
dedlfix.
Hello,
Die Änderungsprotokolle sind mir immer zu mühselig, obwohl man sie eigentlich lesen müsste.
Aber gibt es vielleicht eine Liste der Funktionen mit Angabe, ob sich darin etwas geändert hat?Hmm, hab ich dir das nicht neulich schon mal geantwortet? Im PHP-Handbuch gibts im Anhang die Migrations-Abschnitte. Da ist alles in gut lesbarer Form aufgeführt.
Dann habe ich das leider vergessen.
Aber http://de2.php.net/manual/en/migration53.parameters.php ist das, was ich suchte.
Danke.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Ich möchte einen String ab einer bestimmten länge abschneiden.
diese Beschreibung passt nicht so ganz...
$sting='hallo was ist # da los';
strstr($string, '#', true)
das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?
... auf diesen Code und diese Problembeschreibung.
Was genau ist das Kriterium, wo geschnitten werden soll und welchen Teil genau möchtest du übrig behalten?
Gruß
Kalk