php字符串操作(清除“_”和时间戳)

时间:2010-03-13 10:29:20

标签: php string

我无法找到如何去除字符串中无用部分的方法(从SQL中读取) 我已经尝试过strreplace并截断,但那些并不好。

我有一个名为$ stuff

的字符串变量

如果 $ stuff = 145_timestamp 我想清除_和后面的字符。所以我想 $ stuff只有145 。感谢。

5 个答案:

答案 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];