note 79347 modified in function.strstr by danbrown

From: Date: Fri, 28 Nov 2008 20:04:41 +0000
Subject: note 79347 modified in function.strstr by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-147173@lists.php.net to get a copy of this message
If you want to use the $before_needle parameter that's only in PHP 5.3.0, I found a way to use it in lower versions. The code is a bit hefty, but it works. It also has added $include_needle and $case_sensitive. <?php // ==== I don't guarantee this is faster than the PHP 6 before needle, ==== // ==== but it works for PHP below 6 atleast. ==== // ==== IT ALSO HAS INCLUDE NEEDLE BOOLEAN.. ==== function strstrbi($haystack,$needle,$before_needle, $include_needle,$case_sensitive) { $strstr = ($case_sensitive) ? 'strstr' : 'stristr'; if($before_needle!=true && $before_needle!=false && isset($before_needle)){ die('PHP: Error in function '.chr(39).'$strstrbi'. chr(39).' : parameter '. chr(39).'$before_needle'.chr(39).' is not a supplied as a boolean.'); } // END BOOLEAN CHECK '$before_needle' if($include_needle!=true && $include_needle!=false && isset($include_needle)){ die('PHP: Error in function '.chr(39).'$strstrbi'. chr(39).' : parameter '. chr(39).'$include_needle'.chr(39). ' is not a supplied as a boolean.'); } // END BOOLEAN CHECK '$include_needle' if($case_sensitive!=true && $case_sensitive!=false && isset($case_sensitive)){ die('PHP: Error in function '.chr(39).'$strstrbi' .chr(39).' : parameter '. chr(39).'$case_sensitive'.chr(39).' is not a supplied as a boolean.'); } // END BOOLEAN CHECK '$case_sensitive' if(!isset($before_needle)){ $before_needle=false; } if(!isset($include_needle)){ $include_needle=true; } if(!isset($case_sensitive)){ $case_sensitive=false; } switch($before_needle){ case true: switch($include_needle){ case true: $temp=strrev($haystack); $ret=strrev(substr($strstr($temp,$needle),0)); break; // END case true : $include_needle case false: $temp=strrev($haystack); $ret=strrev(substr($strstr($temp,$needle),1)); break; // END case false : $include_needle } break; // END case true : $before_needle case false: switch($include_needle){ case true: $ret=$strstr($haystack,$needle); break; // END case true: $include_needle case false: $ret=substr($strstr($haystack,$needle),1); break; // END case false: $include_needle } break; // END case false : $before_needle } if(!empty($ret)){ return $ret; }else{ return false; } } // === END FUNCTION 'strstrbi' // Example $email = 'user@example.com'; $domain = strstrbi($email, '@', false, false, false); echo $domain; // prints example.com $user = strstrbi($email, '@', true, false, false); echo $user; // prints user ?> --was-- If you want to use the $before_needle parameter that's only in PHP 5.3.0, I found a way to use it in lower versions. The code is a bit hefty, but it works. It also has added $include_needle and $case_sensitive. <?php // ==== I don't guarantee this is faster than the PHP 6 before needle, ==== // ==== but it works for PHP below 6 atleast. ==== // ==== IT ALSO HAS INCLUDE NEEDLE BOOLEAN.. ==== function strstrbi($haystack,$needle,$before_needle, $include_needle,$case_sensitive) { $strstr = ($case_sensitive) ? 'strstr' : 'stristr'; if($before_needle!=true && $before_needle!=false && isset($before_needle)){ die('PHP: Error in function '.chr(39).'$strstrbi'. chr(39).' : parameter '. chr(39).'$before_needle'.chr(39).' is not a supplied as a boolean.'); } // END BOOLEAN CHECK '$before_needle' if($include_needle!=true && $include_needle!=false && isset($include_needle)){ die('PHP: Error in function '.chr(39).'$strstrbi'. chr(39).' : parameter '. chr(39).'$include_needle'.chr(39). ' is not a supplied as a boolean.'); } // END BOOLEAN CHECK '$include_needle' if($case_sensitive!=true && $case_sensitive!=false && isset($case_sensitive)){ die('PHP: Error in function '.chr(39).'$strstrbi' .chr(39).' : parameter '. chr(39).'$case_sensitive'.chr(39).' is not a supplied as a boolean.'); } // END BOOLEAN CHECK '$case_sensitive' if(!isset($before_needle)) { $before_needle=false; } if(!isset($include_needle)) { $include_needle=true; } if(!isset($case_sensitive)) { $case_sensitive=false; } switch($before_needle) { case true: switch($include_needle) { case true: $temp=strrev($haystack); $ret=strrev(substr($strstr($temp,$needle),0)); break; // END case true : $include_needle case false: $temp=strrev($haystack); $ret=strrev(substr($strstr($temp,$needle),1)); break; // END case false : $include_needle } break; // END case true : $before_needle case false: switch($include_needle) { case true: $ret=$strstr($haystack,$needle); break; // END case true: $include_needle case false: $ret=substr($strstr($haystack,$needle),1); break; // END case false: $include_needle } break; // END case false : $before_needle } if(!empty($ret)){ return $ret; }else{ return false; } } // === END FUNCTION 'strstrbi' // Example $email = 'user@example.com'; $domain = strstrbi($email, '@', false, false, false); echo $domain; // prints example.com $user = strstrbi($email, '@', true, false, false); echo $user; // prints user ?> http://php.net/manual/en/function.strstr.php

« previous php.notes (#147173) next »