Hi,
Monday, July 14, 2003, 9:11:11 PM, you wrote:
PA> HI list
PA> Is there an elegant way to know when the last time through the loop is
PA> going to be and to do something else?
PA> I want to search through a table by "exploding" the search string and
PA> then compounding my own sql string by working through the array.
>>From my example below, you can see I use a foreach to loop through the
PA> array. Arguably I could first determine the amount of elements in the
PA> array and then use a for instead of a foreach, but I'm not sure if that
PA> will help ( will probably need a switch instead if you want to work with
PA> the sheer array elements), however, the if statement inside the loop is
PA> meant to "strip" out "the" and "and", meaning that it won't much help to
PA> use that approach anyway.
PA> Anyway, as you can see my problem lies with the SQl when the last
PA> element is reached, then it should NOT add another "and" or "or".
PA> My attempts at "backtracking" the $sql string/array and start writing
PA> the end part of the string obviously fails.
PA> Any help with my "logic", ie, how do/would you guys do this?
PA> Thanks
PA> $table_name = "test";
PA> if ($_POST[any_all] == "any") {
PA> $logic = "or";
PA> }
PA> elseif ($_POST[any_all] == "all") {
PA> $logic = "and";
PA> }
PA> $string = $_POST[text];
PA> $phrases = explode(" ", $string);
PA> $sql = "select * from $table_name where ";
PA> foreach ($phrases as $key=>$val) {
PA> if (($val != "the") && ($val != "and")) {
PA> $sql.= "name like '%$val%' $logic";
PA> }
PA> }
PA> $length = strlen($sql);
PA> $newlen = $length - 4;
PA> $sql[$newlen].= " order by name";
PA> echo $sql;
I would do this
$like = '';
foreach ($phrases as $key=>$val) {
if (($val != "the") && ($val != "and")) {
if(!empty($like)) $like .= ' '.$logic.' ';
$like.= "name like '%$val%'";
}
}
$sql .= $like;
--
regards,
Tom
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php