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

php字符串操作(清除“\u1”和时间戳),php,string,Php,String,我找不到如何从SQL中删除字符串中无用的部分 我试过strreplace和truncate,但都不太好 我有一个名为$stuff的字符串变量 如果$stuff=145_时间戳,我想清除u及其后的字符。所以我只想把$stuff设为145。谢谢。试试,它将根据分隔符将字符串拆分为数组。如果使用u作为分隔符,则可以使用以下命令从数组中选取第一个值: try,它将根据分隔符将字符串拆分为数组。如果使用u作为分隔符,则可以使用以下命令从数组中选取第一个值: 获取字符串的整数值。也可以使用正则表达式或分解:

我找不到如何从SQL中删除字符串中无用的部分 我试过strreplace和truncate,但都不太好

我有一个名为$stuff的字符串变量

如果$stuff=145_时间戳,我想清除u及其后的字符。所以我只想把$stuff设为145。谢谢。

试试,它将根据分隔符将字符串拆分为数组。如果使用u作为分隔符,则可以使用以下命令从数组中选取第一个值:

try,它将根据分隔符将字符串拆分为数组。如果使用u作为分隔符,则可以使用以下命令从数组中选取第一个值:

获取字符串的整数值。也可以使用正则表达式或分解:

$int = preg_replace('/^(\d+)/', '$1', $string);
$int = explode('_',  $string)[0];
获取字符串的整数值。也可以使用正则表达式或分解:

$int = preg_replace('/^(\d+)/', '$1', $string);
$int = explode('_',  $string)[0];

我对这里建议的各种方法运行了一些基准测试,并添加了一些我自己的建议——这些是每种方法100000次迭代的时间安排

int cast     :  79.45ms
intval       : 394.39ms
strtok       : 428.85ms
preg_replace : 604.68ms
substr       : 719.92ms
explode      : 821.99ms
int cast方法以1英里的优势获胜,但如前所述,您将去掉前导零。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);

我对这里建议的各种方法运行了一些基准测试,并添加了一些我自己的建议——这些是每种方法100000次迭代的时间安排

int cast     :  79.45ms
intval       : 394.39ms
strtok       : 428.85ms
preg_replace : 604.68ms
substr       : 719.92ms
explode      : 821.99ms
int cast方法以1英里的优势获胜,但如前所述,您将去掉前导零。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);

是的,我知道这是一个新手问题,但我在php手册中找不到解决方案。一个链接就足够了。是的,我知道这是一个新手问题,但我在php手册中找不到解决方案。一个链接就足够了。注意:如果$stuff=020\u时间戳,它将变为20。这可能与020相同,也可能不同。注意:如果$stuff=020\u时间戳,它将变为20。这可能与020是同一件事,也可能与020不是同一件事。这是最低效的方法——explode尽全力构建一个值数组,但它们从未被使用过。它比murugaperumal的int cast建议慢10倍。过早优化等等…:p这是最低效的方法-explode尽全力构建一个值数组,但这些值从未被使用过。它比murugaperumal的int cast建议慢10倍。过早优化等等…:如果不止一个怎么办?如果不止一个怎么办?保罗·迪克森:好东西。在SQL中进行替换/转换怎么样?@Paul Dixon:好东西。在SQL中执行替换/强制转换怎么样?