XaraX: parsen von Parametern mit PHP

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.

Aufgabe

- 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