[PHP/MySQL/regexp] enum waardes naar array met regexp

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het beheer van een dynamische tabel. Dit wil zeggen dat gebruikers (ala phpMyAdmin) eigen kolommen kunnen toevoegen en verwijderen. Dit is allemaal gelukt maar bij het invoeren van wat een nieuwe record wil ik een html-form bouwen aan de hand van de kolommen. Hierbij maak een ik loop van de kolommen, en hiermee zet ik alle velden op. Dit gebeurt op de volgende manier:
PHP:
1
2
3
4
5
6
7
<?
$query = "SHOW COLUMNS FROM relaties";
$result = mysql_query($query) or error("db-fout: ".mysql_error());
while($record = mysql_fetch_object($result)) {
  // input-veld
}
?>

Bij een enum-veld heb ik een script gevonden om de enum waardes om te zetten naar een select-veld, alleen vond ik het wat omslachtig. Het volgende heb ik al gevonden:
PHP:
1
2
3
4
5
6
7
8
9
<?
$thisrow = mysql_fetch_array($result); 
$valuestring = $thisrow[1]; 
$valuestring = ereg_replace("enum", "", $valuestring); 
$valuestring = ereg_replace("\(", "", $valuestring); 
$valuestring = ereg_replace("\)", "", $valuestring); 
$valuestring = ereg_replace("\'", "", $valuestring); 
$values = split(",", $valuestring);
?>

Hierbij is $valuestring een array van waardes die dus makkelijk om te zetten zijn naar een select-veld. Nou ben ik van mening (en jullie waarschijnlijk ook) dat de 4 ereg_replace + de split met 1 regexp op te lossen moet zijn. Zover was ik al gekomen:
PHP:
1
2
3
4
5
6
<?
$teststr = "enum('Man', 'Vrouw', 'Onslachtig')";
$pattern  = "/enum\((.*?)\)/i";
preg_match_all($pattern, $teststr, $matches);
print_r($matches);
?>
waarbij het dus al mogelijk is om de waardes tussen enum() los te krijgen. Iemand een idee om dit dus in 1 regexp op te lossen?

[ Voor 8% gewijzigd door Verwijderd op 11-07-2003 10:58 ]


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Wat werkt er niet aan de regexpt die je gebruikt? Geeft ie wel output?

Ik denk dat je in je regexp in ieder geval de komma moet zetten, dat is je scheidingsteken, of iets als \'(.*?)\'

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 11 July 2003 @ 10:58:
Bij een enum-veld heb ik een script gevonden om de enum waardes om te zetten naar een select-veld, alleen vond ik het wat omslachtig. Het volgende heb ik al gevonden:
PHP:
1
2
3
4
5
6
7
8
9
<?
$thisrow = mysql_fetch_array($result); 
$valuestring = $thisrow[1]; 
$valuestring = ereg_replace("enum", "", $valuestring); 
$valuestring = ereg_replace("\(", "", $valuestring); 
$valuestring = ereg_replace("\)", "", $valuestring); 
$valuestring = ereg_replace("\'", "", $valuestring); 
$values = split(",", $valuestring);
?>
waarbij het dus al mogelijk is om de waardes tussen enum() los te krijgen. Iemand een idee om dit dus in 1 regexp op te lossen?
Je verandert al die 4 waardes in "" - niets. Dus volgens mij moet je gewoon zeggen als de needle gelijk is aan ( of ) of ' of enum en dat kan met |

[ Voor 9% gewijzigd door marty op 11-07-2003 11:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De output die ik nu krijg is een array met onder andere: 'Man', 'Vrouw', 'Onslachtig' als 1 waarde, maar waar ik dus naar op zoek ben is deze 3 onderdelen als afzonderdelijke waardes..

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ja, heb ff voor je getest, deze:
PHP:
1
$valuestring = ereg_replace("enum|\(|\)|'", "", $valuestring);

moet lukken

edit
je kan het zelfs op 1 regel doen met die explode als je wil:
PHP:
1
$values= explode(",", ereg_replace("enum|\(|\)|'", "", $valuestring));

wordt er imo alleen niet leesbaarder op. en ook niet sneller

[ Voor 52% gewijzigd door marty op 11-07-2003 11:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tnx! dat werkt :)

(het zou toch mooi zijn als het met 1 regexp kon zonder nog te splitten :P)

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 11 July 2003 @ 11:21:
Tnx! dat werkt :)

(het zou toch mooi zijn als het met 1 regexp kon zonder nog te splitten :P)
je moet ook niet splitten. het kan gewoon met explode. da's een stuk sneller
Pagina: 1