我无法找到如何去除字符串中无用部分的方法(从SQL中读取) 我已经尝试过strreplace并截断,但那些并不好。
我有一个名为$ stuff
的字符串变量如果 $ stuff = 145_timestamp 我想清除_和后面的字符。所以我想 $ stuff只有145 。感谢。
答案 0 :(得分:4)
我对这里建议的各种方法进行了一些基准测试,添加了一些我自己的建议 - 这些是每种方法100000次迭代的时间
int cast : 79.45ms
intval : 394.39ms
strtok : 428.85ms
preg_replace : 604.68ms
substr : 719.92ms
explode : 821.99ms
int cast方法赢了一英里,但如上所述,您将剥离前导零。 Intval是一种实现相同结果的较慢方法。
使用获取前导零的字符串的快速方法是使用strtok($ str,'_');
$str="154_timestamp";
$c=100000;
$s=microtime(true);
for ($x=0; $x<$c; $x++)
$n=(int)$str;
printf("int cast : %0.2fms\n", (microtime(true)-$s)*1000);
$s=microtime(true);
for ($x=0; $x<$c; $x++)
$n = current(explode("_", $str));
printf("explode : %0.2fms\n", (microtime(true)-$s)*1000);
$s=microtime(true);
for ($x=0; $x<$c; $x++)
$n = substr($str, 0, strpos($str, '_'));
printf("substr : %0.2fms\n", (microtime(true)-$s)*1000);
$s=microtime(true);
for ($x=0; $x<$c; $x++)
$n = strtok($str, '_');
printf("strtok : %0.2fms\n", (microtime(true)-$s)*1000);
$s=microtime(true);
for ($x=0; $x<$c; $x++)
$n = intval($str);
printf("intval : %0.2fms\n", (microtime(true)-$s)*1000);
$s=microtime(true);
for ($x=0; $x<$c; $x++)
$n = preg_replace("/_[^_]+$/",'',$str);
printf("preg_replace : %0.2fms\n", (microtime(true)-$s)*1000);
答案 1 :(得分:3)
尝试explode,它会根据分隔符将字符串拆分为数组。如果使用_
作为分隔符,则可以使用current从数组中选择第一个值:
$number = current(explode("_", $stuff));
答案 2 :(得分:3)
$stuff = "145_timestamp";
$stuff=(int)$stuff;
print $stuff;
答案 3 :(得分:1)
$string = preg_replace("/_[^_]+$/",'',$string);
答案 4 :(得分:0)
intval获取字符串的整数值。或者您可以使用正则表达式或爆炸:
$int = preg_replace('/^(\d+)/', '$1', $string);
$int = explode('_', $string)[0];