|  | Posted by Justin Koivisto on 02/04/06 01:01 
comp.lang.php wrote:> [PHP]
 > $orderBy = 's.app_date desc, s.last_name asc, s.first_name asc, s.mi
 > asc';
 >    if ($_REQUEST['willDesc']) {
 >     $ascArray = array('asc' => 'desc', 'desc' => 'asc'); 	// ARRAY OF
 > ALL ORDERING POSSIBILITIES
 >     $junk = preg_match('/([\s\t]+)a|[de]sc(,?.*$)/i', $orderBy,
 > $matchArray);
 >     $orderBy = substr($orderBy, 0, strpos($orderBy, $matchArray[1])) .
 > ' ' . $ascArray[$matchArray[1]] .
 >                substr($orderBy, strpos($orderBy, $matchArray[1]) +
 > strlen($matchArray[1]), strlen($orderBy));
 >    }
 > [/PHP]
 >
 > Basic premise:
 >
 > I have a SQL "ORDER BY" clause that will be configured like $orderBy 's
 > value.  However, the very first occurrence of "desc" might instead be
 > "asc".  If the very first occurrence is "asc", it must become "desc";
 > likewise, if the very first occurrence is "desc", it must become "asc".
 >
 > I tried Regular Expressions but the pattern failed every single time to
 > match and replace, so I gave up and tried a string function/RegExp code
 > combination, also to no avail.
 >
 > I am not sure how to make this work so I need help figuring out how to
 > do this.
 >
 > Thanx
 > Phil
 >
 
 
 function change_first_order_flag($orderBy){
 $tmp = explode(
 '__SPLIT__HERE__',
 preg_replace(
 '`(asc|desc)`i',
 '__SPLIT__HERE__$1',
 $orderBy
 )
 );
 
 if(count($tmp)>1){
 // there are at least 2 elements
 // therefore, it was in there at least once
 if(substr($tmp[1],0,3)=='des'){
 // it was in descending order
 $tmp[1]='as'.substr($tmp[1],3);
 }else{
 // it was in ascending order
 $tmp[1]='des'.substr($tmp[1],3);
 }
 }
 
 return join($tmp);
 }
 
 
 --
 Justin Koivisto, ZCE - justin@koivi.com
 http://koivi.com
  Navigation: [Reply to this message] |