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