1.测试代码块的运行时间(优化代码使用)
//分别测试fun1和fun2的运行时间
$etime1=microtime(true);
$this->logic->func1($doc, $params,$status=0,$source=1);
$etime2=microtime(true);
print_r($etime2-$etime1.'--');
$this->func2($doc,$params);
$etime3=microtime(true);
print_r($etime3-$etime2.'--');
2.生成不重复的随机数
- @param int $start 需要生成的数字开始范围
- @param int $end 结束范围
- @param int $length 需要生成的随机数个数
- @return array 生成的随机数
function get_rand_number($start=1,$end=10,$length=4){
$connt=0;
$temp=array();
while($connt<$length){
$temp[]=mt_rand($start,$end);
$data=array_unique($temp);
$connt=count($data);
}
sort($data);
return $data;
}
3.将字符串分割为数组
$str='abcde';
str_plite($str);
打印结果如下:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
* @param string $str 字符串
* @return array 分割得到的数组
function mb_str_split($str){
return preg_split('/(?<!^)(?!$)/u', $str );
}
$str='白俊遥博客';
mb_str_split($str);
打印结果如下:
Array
(
[0] => 白
[1] => 俊
[2] => 遥
[3] => 博
[4] => 客
)
4.验证是否是邮箱
* @param string $email 邮箱
* @return boolean 是否是邮箱
function is_email($email){
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
return true;
}else{
return false;
}
}
var_dump(is_email('baijunyao@baijunyao.com'));
// 打印 ture
var_dump(is_email('baijunyao.com'));
// 打印 false
5.array_merge(坑)用法注意
如果传的参数中有一个不是数组,则返回null
此处需要注意在开发过程中
我们可能需要把两次查询的数据合并成一个数组
如果有一个查询为空
那么使用array_merge函数合并的结果就是null;
$a=array(
1=>1,
6=>6
);
$b='';
$result=array_merge($a,$b);
var_dump($result);
输出如下:null
因此;在不确定需要array_merge的数组是否有空值的时候;直接使用(array)强制转数组;上面的代码就可以改成如下形式
$result=array_merge((array)$a,(array)$b);
6.strpos用法注意
// 判断‘白俊遥博客1’中是否存在‘1’这个数字
$haystack='白俊遥博客1';
$needle=1;
if (strpos($haystack, strval($needle))===false) {
// 如果不存在执行此处代码
echo '不存在';
}else{
// 如果存在执行此处代码
echo '存在';
}
7.尽量少预定义变量
$about = 'A very long string of text'; // uses 2MB memory
echo $about;
// VS
echo 'A very long string of text'; // uses 1MB memory
8.数据库字符集设定utf8mb4
为了确保你的字符串从 PHP 到 MySQL都使用 UTF-8,请检查确认你的数据库和数据表都设定为 utf8mb4字符集和整理,并且确保你的 PDO 连接请求也使用了 utf8mb4 字符集。这是 非常重要 的。
9.Apache的ab压力测试
-n1000:请求数:1000, -c100:并发数:100
进入目录下:-> cd /usr/bin/
运行-> ab -n1000 -c100 http://www.qswk2017.ocm/
10.nginx下隐藏url中的index.php
location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$1 last; } }
11.获得手机归属地
function phonenumberinfo($phone){
$list = array();
$soap = new SoapClient('http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl');
$result =(array) $soap->getMobileCodeInfo(array(
'mobileCode'=>$phone
));
list($moblie,$location,$lbs) = explode(' ', $result['getMobileCodeInfoResult']);
if($lbs){
$type = array('移动','电信','联通');
foreach($type as $key=>$value){
$ps = strpos($lbs, $value);
if($ps){
$procver = substr($lbs, 0,$ps);
$list['province'] = $procver;
$list['operator'] = $value;
$list['city'] = $location;
$list['type'] = $key;
break;
}
}
return $list;
}
}
12.对象数组互转
//数组转为对象
function arrayToObject($e){
if( gettype($e)!='array' ) return;
foreach($e as $k=>$v){
if( gettype($v)=='array' || getType($v)=='object' )
$e[$k]=(object)arrayToObject($v);
}
return (object)$e;
}
//对象转为数组
function objectToArray($e){
$e=(array)$e;
foreach($e as $k=>$v){
if( gettype($v)=='resource' ) return;
if( gettype($v)=='object' || gettype($v)=='array' )
$e[$k]=(array)objectToArray($v);
}
return $e;
}
13.redis处理
并发不高的情况: 读: 读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取; 写: 写mysql->成功,再写redis;
并发高的情况: 读: 读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取; 写:异步话,先写入redis的缓存,就直接返回;定期或特定动作将数据保存到mysql,可以做到多次更新,一次保存;