Array aus $_GET Parameter bilden

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich habe folgendes Problem.

Und zwar muss ich aus einem $_GET Parameter ein Array bilden.

Das sieht so aus:

Code:
p_id=5{6}16{3}18

Daraus sollte ich dieses Array bilden:

PHP:
$opt = array(0=>16, 1=>18);

Wobei alles was zwischen {..} steht keinerlei Wert hat für diese Aufgabe.

Ich hab durch dieses Forum schon sooo viel gelernt, aber hier stoße ich wieder an meine Grenzen.

Für einen Denkanstoß oder einen konkreten Tipp wäre ich sehr dankbar.

Gruss
 
Hallo,

ich habe es mal mit explode versucht.

Dabei stoße ich auf 2 Hindernisse.

1. Die erste Ziffer, also indem falle die 5, sollte ebenfalls nicht mit in das Array.
2. Ich bräuchte so eine Art Wildcard EIntrag zwischen {...}, denn die Werte da drinne sind Variabel und immer unterschiedlich.

So geht es leider nicht:

PHP:
explode("{*}", $_GET['p_id']);

Gruss
 
Du könntest preg_split() versuchen. Den Pattern musst du dir noch zusammenbasteln, Ich versuche mich gleich selbst, bin darin aber nicht so fit.

Edit:
Ich hab viel zu kompliziert gedacht. Ein einfaches split() tut es auch
PHP:
$p = '5{6}16{3}18';
var_dump( split('\{[0-9]+\}', $p) );
Du musst dann nur noch das erste Element rauswerfen und evt. die Keys neu vergeben.

Edit2:
Und wie ich gerade sehe, hat auch SilentWarrior das schon geschrieben (Schande über mich -.-)
 
Zuletzt bearbeitet:
Und wie ich gerade sehe, hat auch SilentWarrior das schon geschrieben (Schande über mich -.-)
Hm. Ich hab (erstaunlicherweise erst jetzt) gesehen, dass split deprecated ist, d.h. nicht mehr verwendet werden sollte. Weiter unten steht, man solle tatsächlich lieber [phpf]preg_split[/phpf] verwenden. Also: Schande über mich. :)

[phpf]substr[/phpf] entfernt die 5 am Anfang (wenn es denn immer nur genau ein Zeichen ist).
 
Hi ihr beiden!

Danke ür die Hilfe.
preg_split() hat mir weitergeholfen und substr() ebenfalls.

Läuft alles wunderbar jetzt!

SilentWarrior hat mich jetzt aber auf was aufmerksam gemacht das ich nicht bedacht habe.
Die Ziffer am Anfang kann tatsächlich auch xxx Zeichen enthalten.
Ich glaube da wird es kompliziert.

Ich versuche aber einfach die URL ein wenig anders zu gestalten.

Oder bietet php da auch was feines? :-)

Ich wünsch euch allen ein frohes Fest!


Gruss
 
Du könntest das erste "{" mittels strpos() und dann den Teil von 0 - $pos per substr() abschneiden.
Oder du splittest ganz normal, löscht das erste Element (unset) und ordnest das Array mittels array_merge() neu.
PHP:
$p = '5{3}16{8}18';
$arr = preg_split('#\{[0-9]+\}#', $p);
var_dump($arr);
unset($arr[0]);
$arr = array_merge($arr);
var_dump($arr);
Nur kurz "hingeschmiert", sollte aber das gewünschte Ergebnis liefern.
 
Zurück