php中使用uniqid mt_rand 生成随机不重复字符串的方法
方法一:
<?PHP $str = uniqid(mt_rand(),1); echo 'sha1: ',sha1($str); echo '<br>'; echo 'MD5: ',md5($str);
采用uniqid函数,配合mt_rand随机函数,最后使用散列值得出最终唯一值。
但是通过测试中,发现随机数的唯一性有些相同部分,大概有11位相同的(但无大碍)
第二种方法:GUID
<?PHP echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); ?>
例子3
<?php //使用uniqid mt_rand 生成随机不重复字符串的方法 $snKeys=array(); $total=10;//设置生成数量 $prefix='code';//字符串前缀 while(count($snKeys) < $total) { $snKeys[$prefix . md5(uniqid(mt_rand(), true))] = null; } print_r($snKeys);
用php获取上个月最后一天的时间,有两种方法,都非常简单,详细实现源码如下:
<?php date_default_timezone_set("PRC"); //设置时区 //方法一 $times = date("d") * 24 * 3600; echo date("Y-m-d H:i:s", time()-$times); echo '<br/>'; //方法二 $day = date('d'); echo date("Y-m-d H:i:s", strtotime(-$day.' day')); ?>
方法一是利用当前时间离本月初有多少时间,然后用当前时间减去这个时间差,就可以得到上月最后一天了。
方法二是先计算本月多少号,即离月初有多少天,然后用strtotime计算出$day天前的时间戳,也可以得到上个月的最后一天。
很显然file_exists是受了asp的影响,因为asp不但有fileExists还有folderExists,driverExists,那么PHP中file_exists是什么意思呢?
PHP的 file_exists = is_dir + is_file
它既可以判断文件是否存在,又可以判断目录是否存在。但这样一个全面的函数执行效率非常低,就像asp中request不指定是form,还是get,cookies,所以结论是:
◦如果要判断目录是否存在,请用独立函数 is_dir(directory)
◦如果要判断文件是否存在,请用独立函数 is_file(filepath)
--------------------------------------------------------------------------------------
is_file 只判断文件是否存在;
file_exists 判断文件是否存在或者是目录是否存在;
is_dir 判断目录是否存在;
--------------------------------------------------------------------------------------
查看手册,虽然这两个函数的结果都会被缓存,但是is_file却快了N倍。
还有一个值得注意的:
文件存在的情况下,is_file比file_exists要快N倍;
文件不存在的情况下,is_file比file_exists要慢;
结论是,file_exits函数并不会因为该文件是否真的存在而影响速度,但是is_file影响就大了。
写程序验证一下:
分别执行1000次,记录所需时间。
文件存在(当前目录)
is_file:0.4570ms
file_exists:2.0640ms
文件存在(绝对路径3层/www/hx/a/)
is_file:0.4909ms
file_exists:3.3500ms
文件存在(绝对路径5层/www/hx/a/b/c/)
is_file:0.4961ms
file_exists:4.2100ms
文件不存在(当前目录)
is_file:2.0170ms
file_exists:1.9848ms
文件不存在(绝对路径5层/www/hx/a/b/c/)
is_file:4.1909ms
file_exists:4.1502ms
目录存在
file_exists:2.9271ms
is_dir:0.4601ms
目录不存在
file_exists:2.9719ms
is_dir:2.9359ms
is_file($file)
file_exists($file)
当$file是目录时,is_file返回false,file_exists返回true
文件存在的情况下,is_file比file_exists要快得多;
要检测文件所在的目录越深,速度差越多,但至少快4倍。
文件不存在的情况下,is_file比file_exists要慢一点点,但可以忽略不计。
目录存在的情况下,is_dir比file_exists要快得多;
目录不存在的情况下,is_dir比file_exists要慢一点点,但可以忽略不计。
结论:
如果要判断文件是否存在,用函数 is_file(),
如果要判断目录是否存在,用函数 is_dir(),
好像没地方需要用file_exists了,不确定传入的参数是文件还是目录的时候用
面试题不同公司不一样像百度公司要求算法高这个也能理解了,下面整理了一道据说是百度的面试题,我们来看看它的算法与答案吧。据说是一个百度php的面试题,已给定一个数组:
$arr = array(‘b’=>’a’, ‘c’=>’a’, ‘e’=>’b’, ‘d’=>’b’, ‘f’=>’c’, ‘g’=>’e’, ‘h’=>’f’);
写一个算法,完成到以下格式的转换:
array ( 'a' => array ( 'b' => array ( 'e' => array ( [0] => 'g', ), [0] => 'd', ), 'c' => array ( 'f' => array ( [0] => 'h', ), ), ), )
这个结构应该属于一种Trie树。当时在写的时候由于没发现array_keys()函数第二个参数(汗一个先),于是写了以下这个方法来实现。
function getsomething(&$arr, &$re, $c='') { $c or $c=array_shift(array_keys($arr));//当未指定开始位置时 从数组第一个元素开始 $flag= false; //标记 当有和$c对应的key(键)时 设为true while($k = array_search($c, $arr)) { //循环获取值为$c的key。 getsomething($arr, $re[$c], $k); //一直递归到最后没有key对应时 unset($arr[$k]); //移除 这个元素已经不会再使用了 $flag = true; } //当flag为真时 说明之前获得过正常存在的key,不会继续生成[0]下标的元素 if(! $flag) return $re[] = $c; } //调用 getsomething($arr, $re, 'a');
虽然有点儿奇葩,至少还是实现了。以下是某网友使用array_keys()的另一解法:
function _array_keys($k, $arr) { $return = array(); if($ret = array_keys($arr, $k)) { foreach($ret as $v) { if($t = _array_keys($v, $arr)) { $return[$v] = $t; } else { $return[] = $v; } } } return $return; }后缀名指的是文件拓展名了,我们在php中可以通过许多的方法来获得了,下面一起来看小编整理的一些例子吧。
获取文件后缀的方法有很多种,差不多能总结出7,8种,原理基本上都分成两种。第一种:得到文件名中最后一个“.”的位置,然后再进行截取;第二种:用explode将文件名以“.”进行分割成数组,再取数组中最后一个值。
具体实现源码参考:
$file1 = 'e:/ddd/ww/file.doc.zip'; $file2 = 'e:/ddd/ww/file.jpg.png'; $suffix1 = end( explode('.', $file1) ); //先把文件名以“.”分割成数组,再用end函数取数组最后一个值 $suffix2 = substr( $file2, strrpos($file2, '.')+1 ); //strrpos先计算出最后一个“.”的位置,再用substr截取 echo $suffix1.'-'.$suffix2;
相关文章
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
- JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- 文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
- 这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
- 这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25