Holladiewaldfee,
# bigint(20) unsigned
# set('EINS','ZWEI','DREI','VIER','FÜNF')
# float(11,10)
# enum('eins','zwei','sieben','12')
Wie ich es machen würde:
Zunächst mal würde ich ein Array mit Typen definieren (als Schlüssel) und als Wert den passenden regexp für den "Anhang". Also:
$blubb = array('bigint' -> '/[1]{1,2})\w?(unsigned)?$/s',
'float' -> '/[2]{1,2}(,[0-9]{1,3})?)$/s',
...)
Dann würde ich den Typen mit explode an der öffnenden Klammer vom Schwanz hinten abtrennen:
$bla = explode('(', $typ, 2);
Überprüfung des Typs:
if(isset($blubb[strtolower($bla[0])])) ...
Überprüfung des Anhangs:
if(preg_match($blubb[strtolower($bla[0])], $bla[1], $matches)) ...
Dann kannst Du nach dem 2. if $matches verarbeiten
Das Problem dürfte sein, den passenden Ausdruck für die enum- und set-Dinger zu schreiben. Vielleicht wühlst Du da einfach mal den phpMyAdmin Source-Code durch und schaust, wie die das gelöst haben.
Ciao,
Harry