Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Gruppierung in Regulären Ausdrücken [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Gruppierung in Regulären Ausdrücken


 
ultimazer_1
05-08-2004, 11:38 
 
Hi,
ich habe ein kleines aber ziehmlich ärgerliches problem mit dem ich mich jetzt schon seeeeeehr lange rumschlage;)

ich habe einen String der folgender maßen aussieht "|12|15|6|" ...als Beispiel.
die Zahlen sind ID's für kategorien...ein user kann jetzt seine Kategorien bearbeiten. Das ganze geht über checkboxen, Mehrfachauswahl also.

über eine schleife wird aus der auswahl dann ein neuer String zusammengestelt der dann ´z.B. so aussieht "|2|3|16|"

In einer schleife werden dann die beiden Strings verglichen und der neue entsprechend angepasst, um doppeleinträge zu verhindern...



if(ereg("[|]+[".$new_cat_array[$i2]."]+[|]", $old_data[categories]))
{$new_cat_string = ereg_replace("[".$new_cat_array[$i2]."]+[|]", "", $new_cat_string);}


Das eigentliche problem ist jetzt das wenn im neuen String z.B. "16" enthalten ist und im alten "6" dann nimmt der díe 16 aus dem neuen string da er die 6 im Alten findet...vom code her kann das auch nicht anders sein, ich müsste die 16 also irgendwie so maskieren das die 1 und die 6 ("16")als EINE zahl gesehen werden...wer kann mir sagen wie ich das machen kann.

Grüße und schon mal Danke, Flo:)

 
GriZZ
05-08-2004, 11:41 
 
Hi,

zerlege den string mit explode() doch erstmal in ein array, dazu gibts auch genug beiträge im forum.

Gruß GriZZ

 
wahsaga
05-08-2004, 11:43 
 
Original geschrieben von ultimazer_1
ich habe einen String der folgender maßen aussieht "|12|15|6|" ...als Beispiel.
die Zahlen sind ID's für kategorien...
das klingt schon mal nach einem ... uhm, suboptimalen datenmodell.

In einer schleife werden dann die beiden Strings verglichen und der neue entsprechend angepasst, um doppeleinträge zu verhindern...
wie zum ... kommt man auf die idee, für so etwas regex zu bemühen?

mit explode() am | aufteilen, schon hast du jeweils ein array mit allen IDs.

diese beiden arrays schmeißt du dann zusammen, und wirfst mit array_unique() die doppelten werte raus.

und ja, wenn du deine verkorkste datenstruktur wirklich behalten willst, kannst du aus diesem array mittels implode() dann auch wieder deinen |-getrennten string draus machen ...

 
ultimazer_1
05-08-2004, 11:43 
 
auf die Art hab ich's auch schon probiert und dann halt mit in_array() aber das klappte irgendwie nicht immer und produzierte auch Fehler...Doppeleinträge

die Methode oben funzt ja soweit bloß eben wenn so Sachen wie 6 und 16 oder 5 und 15 drin sind nicht.

Grüße, Flo

 
wahsaga
05-08-2004, 11:45 
 
p.s.:
Original geschrieben von wahsaga
mit explode() am | aufteilen, schon hast du jeweils ein array mit allen IDs.

diese beiden arrays schmeißt du dann zusammen

das kann man natürlich auch noch einfacher haben, wenn man vorher einfach den alten und den neuen string verkettet, und dann auf das ergebnis explode() anwendet.
(nur evtl. mit || aufpassen, weiß nicht was explode daraus macht.)

 
ultimazer_1
05-08-2004, 11:48 
 
hehe,
da haben wir wohl gerade zur selben zeit geschrieben...ok cool, das werd ich dann mal versuchen.

Danke.

Aber wieso ist das eine "verkorkste" Datenstruktur?, wenn du da einen ehrlichen Tipp hast nehm ich den gerne an ;)

Grüße, Flo :)

 
wahsaga
05-08-2004, 11:54 
 
Original geschrieben von ultimazer_1
Aber wieso ist das eine "verkorkste" Datenstruktur?
na ja, wieso speicherst du solche daten in einem string?

du siehst doch, wie viel mühe es macht, den auseinanderzupflücken, wenn du die einzelnen werte brauchst.

warum nimmst du nicht gleich ein array dafür?


wenn es um das speichern in einer textdatei geht - dazu kann man das array in einen string umandeln, bzw. nach dem einlesen den string wieder in ein array - mit serialize/unserialize.

das ist ein einzelner befehl nach dem einlesen, bzw. vor dem speichern - und im rest deines scriptes kannst du dann problemlos mit dem array arbeiten, und brauchst keine stringoperationen oder gar regex, um an die einzelnen werte zu kommen ...

 
ultimazer_1
05-08-2004, 12:06 
 
ne ne,
klar.;)

das ganze wird halt in der DB gespeichert und ich arbeite dann immer nur mit dem string, aber bevor man das speichert will ich halt das dass da späer nicht zu fehlern kommt.

aber danke für die Antwort array_unique() ist dann denke ich die Lösung ;)
kannte die func() bloß so noch nicht :)
Grüße, Flo

 
ultimazer_1
05-08-2004, 12:25 
 
jo cool, klappt perfekt ;)

danke, Flo

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:49 Uhr.