parsen von Parametern mit PHP
XaraX
- programmiertechnik
Guten Morgen,
zum parsen von Parametern habe ich mir eine Funktion geschrieben, jedoch bin ich mir nicht sicher, ob ich den besten Weg gefunden habe und bitte um einen prüfenden Blick und Kommentar, zu verbesserungswürdigen Pasagen.
- Parameter $p ist ein String, der leer oder eine Zeichenkette enthalt-
en kann (Bsp: "ghTxg gl BgX")
- Defaultparameter $v ist ein String und enthält alle möglichen Zeichen
von $p
- $p und $v sind durch Leerzeichen in Parameterblöcke unterteilt
- Parameterblock von $v unterteilt sich in default de- und aktiviert
Aufbau eines Blocks von $v:
aktiviert | trenner | deaktiviert
---------------------------------
| |
String | - | String
| |
Bsp.-Parameterblock: "df-l"
Die Funktion parse_parameter() soll Defaultparameter mit Übergabeparametern prüfen.
1.) Werden default aktivierte Parameter übergeben sind alle default
aktivierten Parameter, die nicht übergeben wurden zu deaktivieren.
2.) Werden default deaktivierte Parameter übergeben sind sie den nach
der Prüfung als aktiv übrigbleibenden Parameter hinzuzufügen.
Beispiel:
parse_parameter('xX g PS34','XYZ-xyz GHhIi-g 012345OP-QRSopqrs')
Ausgabe:
Array
(
[X] => 1
[x] => 1
[G] => 1
[H] => 1
[h] => 1
[I] => 1
[i] => 1
[g] => 1
[P] => 1
[3] => 1
[4] => 1
[S] => 1
)
########################################################################
function parse_parameter($p,$v)
{
Diese Funktion analysiert Funktionsparameter $p anhand eines ueber-
gebenen Defaultstrings $v. Die Funktion unterscheidet zwischen
Gross- und Kleinschreibung. $v ist in Bloecke unterteilt, die durch
ein Leerzeichen voneinander getrennt sind. Werte, die default deak-
tiviert sind, stehen gemeinsam hinter einem negativen Vorzeichen.
zerlegen des Defaultstrings in Bloecke, Umkehr zur besseren Verar-
beitung und Loeschen der Werte
$v=array_flip(explode(' ',$v));
foreach($v as $k=>$b) $v[$k]='';
Vergleich mit $p und den Bloecken, wobei dem zugehoerigem Block das
Zeichen zugeordnent wird. Das entstehende Datenfeld ist schematisch
so Aufgebaut: $v[DEFAULTAKTIV-DEFAULTDEAKTIV]=PARAMETER
for($i=0;$i<strlen($p);$i++)
foreach($v as $k=>$b)
if(strpos($k,$p{$i})!==FALSE)
$v[$k].=$p{$i};
Vergleich zwichen den Defaultbloecken und den uebergebenen Parame-
tern unter Ausschluß
foreach($v as $k=>$b)
{
# Abspalten der default aktivierten - von den default deaktivierten
# Werten
$k=explode('-',$k);
for($i=0;$i<strlen($b);$i++)
{
# die Uebergebenen Parameter werden den Defaults zugeordnent
if(strpos($k[0],$b{$i})!==FALSE) $a[0].=$b{$i};
else $a[1].=$b{$i};
}
# Aufbau des zu ueckzugebene Datenfelds
if($a[0]=='') $b=$k[0].$a[1];
else $b=$a[0].$a[1];
for($i=0;$i<strlen($b);$i++)
$x[$b{$i}]=TRUE;
# $a wird geloescht, da sonst unnoetige Ueberschneidungen auftreten
unset($a);
}
return($x);
}
Gruß aus Berlin!
eddi