discomatt Posted August 28, 2008 Share Posted August 28, 2008 Actually, I kind of made an ass of myself here. preg_replace( '/[^\d]/', '', $str ); was faster than my code above. Here's my benchmarks. <?php set_time_limit( 0 ); $smallStr = 'q2r5uUuT3VIRLvv6Wc7qKhyEtEObfj8oFJdYJxTdvqIgUIwbOahDOh7vF8HFo9FvJ0iJ3SQg57foO5EKtfIA8EMf0xAAH8QCle8d'; $largeStr = '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'; function str ($str) { $num = ''; for( $i=0,$c=strlen($str); $i<$c; $i++ ) if ( is_numeric($str[$i]) ) $num .= $str[$i]; return $num; } function rgx ($str) { return preg_replace( '/[^\d]/', '', $str ); } function timer( $func, $arg, $loops ) { $start = microtime(true); for ( $i=0; $i<$loops; $i++ ) call_user_func( $func, $arg ); return microtime(true) - $start; } echo 'Regex small: ' . timer('rgx', $smallStr, 10000 ) . '<br />'; echo 'String small: ' . timer('str', $smallStr, 10000 ) . '<br /><br />'; echo 'Regex big: ' . timer('rgx', $largeStr, 10000 ) . '<br />'; echo 'String big: ' . timer('str', $largeStr, 10000 ) . '<br /><br />'; ?> Outputs: Regex small: 0.72497701644897 String small: 1.4104418754578 Regex big: 17.620409011841 String big: 38.559011936188 PHP 5.2.6, Apache 2.2.8 But what cooldude832 says still makes no sense. Quote Link to comment https://forums.phpfreaks.com/topic/121643-removing-non-digits-in-a-string/page/2/#findComment-628178 Share on other sites More sharing options...
DarkWater Posted August 28, 2008 Share Posted August 28, 2008 Yeah, discomatt, I was going to say that the for loops would probably be slower. Quote Link to comment https://forums.phpfreaks.com/topic/121643-removing-non-digits-in-a-string/page/2/#findComment-628180 Share on other sites More sharing options...
kratsg Posted August 28, 2008 Share Posted August 28, 2008 Actually, I kind of made an ass of myself here. preg_replace( '/[^\d]/', '', $str ); was faster than my code above. Here's my benchmarks. <?php set_time_limit( 0 ); $smallStr = 'q2r5uUuT3VIRLvv6Wc7qKhyEtEObfj8oFJdYJxTdvqIgUIwbOahDOh7vF8HFo9FvJ0iJ3SQg57foO5EKtfIA8EMf0xAAH8QCle8d'; $largeStr = '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'; function str ($str) { $num = ''; for( $i=0,$c=strlen($str); $i<$c; $i++ ) if ( is_numeric($str[$i]) ) $num .= $str[$i]; return $num; } function rgx ($str) { return preg_replace( '/[^\d]/', '', $str ); } function timer( $func, $arg, $loops ) { $start = microtime(true); for ( $i=0; $i<$loops; $i++ ) call_user_func( $func, $arg ); return microtime(true) - $start; } echo 'Regex small: ' . timer('rgx', $smallStr, 10000 ) . '<br />'; echo 'String small: ' . timer('str', $smallStr, 10000 ) . '<br /><br />'; echo 'Regex big: ' . timer('rgx', $largeStr, 10000 ) . '<br />'; echo 'String big: ' . timer('str', $largeStr, 10000 ) . '<br /><br />'; ?> Outputs: Regex small: 0.72497701644897 String small: 1.4104418754578 Regex big: 17.620409011841 String big: 38.559011936188 Try using [\D] instead of [^\d]. I'm wondering if it will be slightly faster by excluding the "not" operator (^). Quote Link to comment https://forums.phpfreaks.com/topic/121643-removing-non-digits-in-a-string/page/2/#findComment-628182 Share on other sites More sharing options...
dijavoo Posted April 25, 2010 Share Posted April 25, 2010 echo $number=preg_replace('/\D/', '', $number); Quote Link to comment https://forums.phpfreaks.com/topic/121643-removing-non-digits-in-a-string/page/2/#findComment-1047906 Share on other sites More sharing options...
salathe Posted April 25, 2010 Share Posted April 25, 2010 Hmm, 2008 called... it wants its thread back! Quote Link to comment https://forums.phpfreaks.com/topic/121643-removing-non-digits-in-a-string/page/2/#findComment-1047910 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.