[PHP]String verarbeiten

XadreS

Painkiller
ID: 370013
L
4 Mai 2006
3.466
345
Hallo,

habe ein Problem mit einem String. Und zwar habe ich einen String mit mehreren ID's, mit Semikolon getrennt. Diesen pflücke ich auseinander und vergleiche ob eine bestimmte ID in dem String bereits vorkommt. Soweit so gut.
Wenn ich jetzt aber eine ID aus dem String löschen will, wie mach ich das am besten?

Beispiel:
STRING: 13789;654;554;8798;3211;
soll gelöscht werden: 554;
ergebnis: 13789;654;8798;3211;

so soll es halt am ende aussehen, habe aber atm mal gar keinen plan...

grüße und danke im vorraus
 
Einfach in ein Array Zerlegen (explode), dann mit array_search und unset das gewünschte Element löschen und mit implode wieder zusammenfügen.

Ansonsten kannst du auch einfach mit
PHP:
$string = preg_replace('~(^|;)derWert;~','',$string);
(keine ahnung ob das so Funktioniert...)
 
Einfach in ein Array Zerlegen (explode), dann mit array_search und unset das gewünschte Element löschen und mit implode wieder zusammenfügen.

Das ist wahrscheinlich die beste Lösung, wenn der String relativ wenige Werte enthält. Wenn er sehr sehr sehr viele Werte enthält, würde ich es so nicht machen. Könnte dann recht Rechenintensiv werden.

Du könntest dann nach dem zu löschenden String im Originalstring suchen (mit strpos). Bei deiner Liste sehe ich da die kleine Schwierigkeit, dass die zu suchende ID auch Teil einer anderen ID sein kann, z.B.
zu suchende ID: 554
String1: 13789;3554;554;8798;3211;
String2: 5541;3554;554;8798;3211;

In diesem Fall darfst du natürlich nicht die Werte von 3554 (String1) oder 5541 (String2) löschen. Der zu suchende String muss also
- entweder ganz am Anfang stehen (dann liefert strpos 0) mit Semikolon danach
- oder direkt davor und danach muss ein Semikolon sein.

Jetzt weißt du, wo die zu löschende ID beginnt. Und die Länge der zu löschenden ID bekommst du ja mit strlen raus (evtl. noch 1 addieren, wenn das semikolon nicht teil des zu löschenden ID-Strings ist).

Und nun kannst du deinen String neu zusammensetzen, indem du alles vorher und alles danach mit substr dir raus suchst und zu einem neuen String zusammenfügst. Mußt nur aufpassen, dass du danach nicht auf einmal 2 Semikolons direkt hintereinander hast. Und der zu durchsuchende String muss immer mit einem Semikolon enden.

Wie gesagt. Nur empfehlenswert, falls du sehr sehr viele IDs in dem String hast. Ansonsten ist die explode-Methode einfacher.
 
Danke, dass mit dem explode hab ich geändert.
Hatte den string vorher mit strtok zerstückelt. gibts da nachteile ?

preg-replace hat mir auch sehr geholfen. sowas habe ich gesucht :)
 
Ich würde mal grundsätzlich deine Vorgehensweise hinterfragen. Stringoperationen sind ziemlich unperformant und wenn man nicht gerade gezwungen ist, mit serialisierten Daten zu arbeiten, würde ich die Form der Speicherung wenn möglich vermeiden...

Ansonsten... preg_replace() ist auch relativ rechenintensiv. Regex halt...

Wieso nimmst du nich einfach str_replace? Einfacher gehts doch eigentlich nicht.
$id = '554';
$str = ';13789;3554;554;8798;3211;';
$str = str_replace (';'.$id.';', ';', $str);