3

PHP 的 microtime() 返回如下内容:

0.56876200 1385731177 //that's msec sec

我需要这种格式的值:

1385731177056876200 //this is sec msec without space and dot

目前我正在做这样的事情:

$microtime =  microtime();
$microtime_array = explode(" ", $microtime);
$value = $microtime_array[1] . str_replace(".", "", $microtime_array[0]);

是否有一行代码来实现这一目标?

4

2 回答 2

6

您可以使用正则表达式在一行中完成整个操作:

$value = preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', microtime());

示例

<?php
    $microtime = microtime();
    var_dump( $microtime );
    var_dump( preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', $microtime) );
?>

输出

string(21) "0.49323800 1385734417"  
string(19) "1385734417049323800"

演示

于 2013-11-29T14:09:43.027 回答
3

不幸的是,由于 PHP 对浮点表示的限制(整数为 14 位),使用microtime()withtrue作为参数没有什么意义。

因此,您必须像使用字符串一样使用它(preg_replace()例如,通过)或调整precision以使用本机函数调用:

var_dump(1234567.123456789);//float(1234567.1234568)
ini_set('precision', 16);
var_dump(1234567.123456789);//float(1234567.123456789)

- 所以,它会像:

ini_set('precision', 20);
var_dump(str_replace('.', '', microtime(1)));//string(20) "13856484375004820824" 

- 仍然不是“单线”,但您知道导致此类行为的原因,因此您只能调整precision一次然后使用它。

于 2013-11-29T14:22:35.727 回答