|
Posted by Sandman on 09/07/05 17:23
In article <dfmj8b$95j$1@gemini.csx.cam.ac.uk>,
"brendan" <brendan_NOSPAM_@srl.cam.ac.uk> wrote:
> my regular expression knowledge is admittedly amateurish ... I have spent an
> hour trying to get this to work without any great success, but am in the
> middle of a big project so I can't waste a day fiddling around to get it to
> work (although I might have to if someone here can't help).
>
> I thought I would throw it out to the group to see if anyone could solve the
> problem quick and easy.
>
> I need to break a search string into components to search against a
> database.
> We want to allow the user to specify database columns by using
>
> [column name][colon][search text]
>
> i.e.
> "author:Jane Smith institution:university of Cambridge year:1976"
>
> so basically we have to split the string at the beginning of any word that
> ends in a colon.
> I need then get an array with column_name=>column_value to construct a SQL
> query from.
>
> At the moment I'm just getting garbage or parse errors ... Can anyone help?
> Accolades for anyone that can. A pint of lager for anyone in Cambridge that
> can!
> cheers
> Brendan.
This is one way to do it:
#!/usr/bin/php
<?
$string = "author:Jane Smith institution:university of Cambridge year:1976";
$m = preg_split("/\s*(\w+):/", $string, -1,
PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
for ($i=0;$i<=count($m)-1;$i+=2){
$sql_query[] = $m[$i] . " = '" . $m[$i+1] . "'";
}
print "select * from database.table where " . join(" and ", $sql_query);
?>
The output:
select * from database.table where author = 'Jane Smith' and institution =
'university of Cambridge' and year = '1976'
--
Sandman[.net]
[Back to original message]
|