1、二维数组按照指定字段排序
/**
* 排序二维数组
* @param $arrUsers 排序数组
* @param string $sortKey 排序字段
* @param string $sortType 排序类型(升序,降序)
* @return mixed
*/
private function sortTwoArray($arrUsers,$sortKey='id',$sortType="SORT_DESC"){
$arrSort = array();
foreach($arrUsers AS $uniqid => $row){
foreach($row AS $key=>$value){
$arrSort[$key][$uniqid] = $value;
}
}
if($sortType){
array_multisort($arrSort[$sortKey], constant($sortType), $arrUsers);
}
return $arrUsers;
}
2、递归方法多维数组转为一维数组,键不变
function arr_foreach ($arr)
{
static $tmp=array();
if (!is_array ($arr))
{
return false;
}
foreach ($arr as $key=>$val )
{
if (is_array ($val))
{
arr_foreach ($val);
}
else
{
$tmp[$key]=trim($val);
}
}
return $tmp;
}
3、获取经纬度
function getLatlon($address){
$url = "http://api.map.baidu.com/geocoder?address={$address}&output=json&key=MYQEYRx0KCRkEtvzKqOFutVk9gp0PNZx";
$str = https_request($url);
$res = json_decode($str,true);
return $res['result']['location'];
}
4、CURL https请求方法
/**
* CURL https请求方法
* @param $url
* @param null $data
* @return mixed
*/
function https_request($url,$data = null){
$c= curl_init();
curl_setopt($c,CURLOPT_URL,$url);
curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($c,CURLOPT_SSL_VERIFYHOST,false);
// curl_setopt($c, CURLOPT_POST,true);
if(!empty($data)){
curl_setopt($c,CURLOPT_POST,1);
curl_setopt($c,CURLOPT_POSTFIELDS,$data);//field
}
curl_setopt($c,CURLOPT_RETURNTRANSFER,1);
$out = curl_exec($c);
curl_close($c);
return $out;
}
5、获取客户端IP地址
/**
* 获取客户端IP地址
*/
functiongetClientIP()
{
static$ip= NULL;
if($ip!== NULL)
return$ip;
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr=explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$pos=array_search('unknown',$arr);
if(false !==$pos)
unset($arr[$pos]);
$ip=trim($arr[0]);
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip=$_SERVER['HTTP_CLIENT_IP'];
}elseif(isset($_SERVER['REMOTE_ADDR'])) {
$ip=$_SERVER['REMOTE_ADDR'];
}// IP地址合法验证 $ip = ( false !== ip2long($ip) ) ? $ip : '0.0.0.0'; return $ip;
}
6、多维数组转成一维
function arr_foreach ($arr)
{
static $tmp=array();
if (!is_array ($arr))
{
return false;
}
foreach ($arr as $key=>$val )
{
if (is_array ($val))
{
arr_foreach ($val);
}
else
{
$tmp[$key]=trim($val);
}
}
return $tmp;
}
/*******************************************/
7、正则匹配手机号
/**
* 正则匹配手机号
* @param $mobile
* @return bool
*/
functionisMobile($mobile) {
if(!is_numeric($mobile)) {
return false;
}
returnpreg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,6,7,8]{1}\d{8}$|^18[\d]{9}$#',$mobile)? true : false;
}
8、远程图片存本地
/**
* 远程图片存本地
* @param $url
* @param string $saveName
* @param string $path
* @return string
*/
public functionput_file_from_url_content($url,$saveName='tmp.png',$path='./Tmp/') {
// 设置运行时间为无限制
set_time_limit(0);
$url=trim($url);
$curl=curl_init();
// 设置你需要抓取的URL
curl_setopt($curl,CURLOPT_URL,$url);
// 设置header
curl_setopt($curl,CURLOPT_HEADER,0);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
// 运行cURL,请求网页
$file=curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 将文件写入获得的数据
$filename=$path.$saveName;
$write= @fopen($filename,"w");
if($write== false) {
return false.'1';
}
if(fwrite($write,$file)== false) {
return false.'2';
}
if(fclose($write)== false) {
return false.'3';
}
return$filename;
}
9、字符串中的表情处理
/**
把用户输入的emoji表情转义(主要针对特殊符号和emoji表情)
*/
function userTextEncode($str){
if(!is_string($str))return $str;
if(!$str || $str=='undefined')return '';
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){
return addslashes($str[0]);
},$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。
return json_decode($text);
}
/**
emoji表情编码字符串 解码
*/
function userTextDecode($str){
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback('/\\\\\\\\/i',function($str){
return '\\';
},$text); //将两条斜杠变成一条,其他不动
return json_decode($text);
}
10、生成不重复的订单号
/**
* 生成不重复的订单号
* (组成部分:年月日+订单类型代号+今天秒数+毫秒数)保证同一天同一秒内的订单编号不重复,同时可以区分订单类型
* @param int $type
* @return string
*/
functionbuild_order_sn($type=1)
{
$date=date("Ymd");
$second=(time()-strtotime(date("Y-m-d")))+10598;
$float=microtime(true)*1000000;
$float=str_replace(",","",number_format($float));
$microtime=substr($float,-4,3);
$order_sn=$date.$type.$second.$microtime;
// return $order_sn;
// $sn = str_replace(",","",number_format($order_sn));
return$order_sn;//$date.$second.$microtime;
}
11、微信图片防盗链
$url = $_GET["url"];
header('Content-type: image/jpeg');
$refer = "http://mp.weixin.qq.com/";
$opt = [
'http'=>[
'header'=>"Referer: " . $refer
]
];
$context = stream_context_create($opt);
$file_contents = file_get_contents($url,false, $context);
echo $file_contents;
12、图片缩放
/**
* 图片等比例缩放函数(以保存新图片的方式实现)
* @param string $picName 被缩放的处理图片源
* @param string $savePath 保存路径
* @param int $maxx 缩放后图片的最大宽度
* @param int $maxy 缩放后图片的最大高度
* @param string $pre 缩放后图片的前缀名
* @return $string 返回后的图片名称() 如a.jpg->s.jpg
*
**/
function scaleImg($picName,$savePath, $maxx = 800, $maxy = 450)
{
$info = getimageSize($picName);//获取图片的基本信息
$w = $info[0];//获取宽度
$h = $info[1];//获取高度
if($w<=$maxx&&$h<=$maxy){
return $picName;
}
//获取图片的类型并为此创建对应图片资源
switch ($info[2]) {
case 1://gif
$im = imagecreatefromgif($picName);
break;
case 2://jpg
$im = imagecreatefromjpeg($picName);
break;
case 3://png
$im = imagecreatefrompng($picName);
break;
default:
die("图像类型错误");
}
//计算缩放比例
if (($maxx / $w) > ($maxy / $h)) {
$b = $maxy / $h;
} else {
$b = $maxx / $w;
}
//计算出缩放后的尺寸
$nw = floor($w * $b);
$nh = floor($h * $b);
//创建一个新的图像源(目标图像)
$nim = imagecreatetruecolor($nw, $nh);
//透明背景变黑处理
//2.上色
$color=imagecolorallocate($nim,255,255,255);
//3.设置透明
imagecolortransparent($nim,$color);
imagefill($nim,0,0,$color);
//执行等比缩放
imagecopyresampled($nim, $im, 0, 0, 0, 0, $nw, $nh, $w, $h);
//输出图像(根据源图像的类型,输出为对应的类型)
$picInfo = pathinfo($picName);//解析源图像的名字和路径信息
$savePath = $savePath. "/" .date("Ymd")."/".'pre_' . $picInfo["basename"];
switch ($info[2]) {
case 1:
imagegif($nim, $savePath);
break;
case 2:
imagejpeg($nim, $savePath);
break;
case 3:
imagepng($nim, $savePath);
break;
}
//释放图片资源
imagedestroy($im);
imagedestroy($nim);
//返回结果
return $savePath;
}
13、图片裁剪成圆形
/**
* 将图片切成透明背景的圆形
* @param $imgpath 原图地址
* @param $filePath 结果保存路径
* @return string
*/
function yuanjiao($imgpath,$filePath){
$ext = pathinfo($imgpath);
$src_img = null;
switch ($ext['extension']) {
case 'jpg':
$src_img = imagecreatefromjpeg($imgpath);
break;
case 'png':
$src_img = imagecreatefrompng($imgpath);
break;
}
$wh = getimagesize($imgpath);
// return $wh;
$w = $wh[0];
$h = $wh[1];
$w = min($w, $h);
$h = $w;
$img = imagecreatetruecolor($w, $h);
//这一句一定要有
imagesavealpha($img, true);
//拾取一个完全透明的颜色,最后一个参数127为全透明
$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
imagefill($img, 0, 0, $bg);
$r= $w/2; //圆半径
// return $r;
$y_x = $r; //圆心X坐标
$y_y = $r; //圆心Y坐标
for ($x = 0; $x < $w; $x++) {
for ($y = 0; $y < $h; $y++) {
$rgbColor = imagecolorat($src_img, $x, $y);
if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
imagesetpixel($img, $x, $y, $rgbColor);
}
}
}
imagepng($img, $filePath);
return $filePath;
}
/**
* 生成随机邀请码
*@returnstring
*/
functionmakeCode() {
$code='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$rand=$code[rand(0,25)]
.strtoupper(dechex(date('m')))
.date('d').substr(time(),-5)
.substr(microtime(),2,5)
.sprintf('%02d',rand(0,99));
for(
$a= md5($rand,true),
$s='0123456789ABCDEFGHIJKLMNOPQRSTUV',
$d='',
$f=0;
$f<8;
$g= ord($a[$f] ),
$d.=$s[ ($g^ ord($a[$f+8] ) ) -$g&0x1F],
$f++
);
return$d;
}
/**
* 生成纯数字的用户的唯一UUID
*@param$length 中间数字长度
*@param$uid 上一个用户的自增ID--参照
*@returnstring
*/
functionmakeUid($uid,$length=3){
$info="";
$pattern='12345678900987654321123456789012345';
for($i=0;$i<$length;$i++) {
$info.=$pattern{mt_rand(0,35)}; //生成php随机数
}
$len= strlen($uid);
$mid= (int)($len/2);
$prefix= (int)substr($uid,0,$mid);
$endfix= (int)substr($uid,$mid);
return$prefix.$info.$endfix;
}