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. 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. 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 (^). 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); 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! 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
Archived
This topic is now archived and is closed to further replies.