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)
[Funktion] String in ein hash parsen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[Funktion] String in ein hash parsen


 
Dr.Speck
15-09-2007, 13:43 
 
Hallo,

ich habe einen String "id(num):name(text):birth(date)" und möchte daraus ein assoc.-array erzeugen und das möglichst effektiv. Bislang mache ich das so:


$ntags = preg_match_all('/([^:]+?)\((.+?)\)/', $order_tags, $a);
if (! $ntags)
throw new Exception('Error parsing taglist: "'.$order_tags.'"');
for ($i=0; $i<$ntags; $i++) {
$b[$a[1][$i]] = $a[2][$i];
}
print_r($a);
print_r($b);


Das Ergebnis soll so aussehen:
array( 'id' => 'num', 'name' => 'text', 'birth' => 'date' )

Hat jemand eine bessere Idee?

 
TobiaZ
15-09-2007, 13:59 
 
ja, einfach ein vollständiges pattern erstellen (von anfang bis ende) und den backreferences namen geben...

 
Dr.Speck
15-09-2007, 14:06 
 
Original geschrieben von TobiaZ
den backreferences namen geben...

Klingt gut, aber hast Du auch ein Codebeispiel?

Wie kann man Backrefs Namen geben wenn die Anzahl variabel sein soll?

 
TobiaZ
15-09-2007, 14:08 
 
Da ich nicht glaube, dass du in der kurzen Zeit ansatzweise versucht hast, selbst nachzuforschen: Nein!

 
Slava
15-09-2007, 14:23 
 
die lösung ist vollkomen in ordnung. ich würde auch nicht anderes machen
ich würde aber statt einer schleife
array_combine($a[1],$a[2]) machen
und regex etwa so /([^:(]+)\(([^)(:]+)/

 
Dr.Speck
17-09-2007, 10:16 
 
Original geschrieben von TobiaZ
Da ich nicht glaube, dass du in der kurzen Zeit ansatzweise versucht hast, selbst nachzuforschen: Nein!

Vielen Dank für diese Hilfreiche Nachricht (und ab in die Tonne damit...)

 
Dr.Speck
17-09-2007, 10:18 
 
Hi slava,

Original geschrieben von Slava
array_combine($a[1],$a[2]) machen[/B]

array_combine() war genau das was ich suchte, danke Slava !

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:01 Uhr.