使用PHP生成独特的微秒级

・3 分钟阅读

PHP中的time()函数返回当前的Unix时间戳, 这是从 Unix时代的秒数开始测量的时间, 在某些情况下非常有用,但并非总是如此。与大多数其他PHP函数一样,此函数也是跨平台兼容的,因为它适用于Unix,Linux,Windows和Mac。

PHP函数的 microtime()更精确和更精细,因为它以微秒返回当前的Unix时间戳, 我们的问题是它返回一个包含空格和点的字符串,例如,如果您从PHP中生成文件名或HTML或CSS标识符的一部分,那么这个字符串不是很有用。

这就是为什么我们在下面写了这么个小而有用的函数, 它基于PHP函数 microtime (),但是,返回一个干净的数字字符串。

请享用!

 
 
 <?php

 /**
 * Generates and returns a string of digits representing the time of the
 * current system in microseconds granularity. 
 * 
 * Compared to the standard time() function, the microtime() function is more 
 * accurate and in addition, successive quick calls inside a loop generate 
 * unique results; which can be quite useful in certain cases. 
 * 
 * Our function below generates digits only output based on the time stamp
 * generated by the microtime() function.
 * 
 * @return string
 */
 function  get_clean_microtimestamp_string () {
  //Get raw microtime (with spaces and dots and digits)
  $mt  =  microtime ();
 
  //Remove all non-digit (or non-integer) characters
  $r  =  "" ;
  $length  =  strlen ( $mt );
 for( $i  =  0 ;  $i  < $length ;  $i ++) {
 if( ctype_digit ( $mt [ $i ])) {
  $r  .=  $mt [ $i ];
 }
 }
 
  //Return
  return  $r ;
}



注意,microtime()仅在支持gettimeofday()系统调用的操作系统上可用, 我们在 Windows 7. Windows 8 和Ubuntu14上测试了它,它们上都能正常工作。

注意microtime()会产生一个不同的输出值,即使是连续多次调用, 你自己试试吧, 或者,从命令行使用下面的PHP代码,看看我们如何测试函数。

 
 
 <?php

 function  array_has_duplicates ( $array ) {
 return  count ( $array )!==  count ( array_unique ( $array ));
}

 $microtimes  = array();
for( $i  =  0 ;  $i  < 1000 ;  $i ++) {
  $microtimes [] =  get_clean_microtimestamp_string ();
}

foreach( $microtimes  as  $microtime ) {
 echo  $microtime  .  "n" ;
}

if( array_has_duplicates ( $microtimes )) {
 echo  "FOUND DUPLICATES!n" ;
}
else {
 echo  "NO DUPLICATES FOUND. AWESOME!n" ;
}

Haojinghui profile image