Re: elegant way of doing something else the last time through a loop?

From: Date: Mon, 14 Jul 2003 11:38:01 +0000
Subject: Re: elegant way of doing something else the last time through a loop?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-155069@lists.php.net to get a copy of this message
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 PA> 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

« previous php.general (#155069) next »