php基本函数汇总
1.统计数组元素个数
$arr=array(
'1011,1003,1008,1001,1000,1004,1012',
'1009',
'1011,1003,1111'
);
$result=array();
foreach($arras$str){
$str_arr=explode(',',$str);
foreach($str_arras$v){
//$result[$v]=isset($result[$v])?$result[$v]:0;
//$result[$v]=$result[$v]+1;
$result[$v]=isset($result[$v])?$result[$v]+1:1;
}
}
print_r($result);
//Array
(
[1011]=>2
[1003]=>2
[1008]=>1
[1001]=>1
[1000]=>1
[1004]=>1
[1012]=>1
[1009]=>1
[1111]=>1
)
2.循环删除目录
functioncleanup_directory($dir){
foreach(newDirectoryIterator($dir)as$file){
if($file->isDir()){
if(!$file->isDot()){
cleanup_directory($file->getPathname());
}
}else{
unlink($file->getPathname());
}
}
rmdir($dir);
}
3.无限极分类生成树
functiongenerateTree($items){
$tree=array();
foreach($itemsas$item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][]=&$items[$item['id']];
}else{
$tree[]=&$items[$item['id']];
}
}
return$tree;
}
functiongenerateTree2($items){
foreach($itemsas$item)
$items[$item['pid']]['son'][$item['id']]=&$items[$item['id']];
returnisset($items[0]['son'])?$items[0]['son']:array();
}
$items=array(
1=>array('id'=>1,'pid'=>0,'name'=>'安徽省'),
2=>array('id'=>2,'pid'=>0,'name'=>'浙江省'),
3=>array('id'=>3,'pid'=>1,'name'=>'合肥市'),
4=>array('id'=>4,'pid'=>3,'name'=>'长丰县'),
5=>array('id'=>5,'pid'=>1,'name'=>'安庆市'),
);
print_r(generateTree($items));
/**
*如何取数据格式化的树形数据
*/
$tree=generateTree($items);
functiongetTreeData($tree){
foreach($treeas$t){
echo$t['name'].'<br>';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
4.数组排序a-b是数字数组写法遇到字符串的时候就要
vartest=['ab','ac','bd','bc'];
test.sort(function(a,b){
if(a<b){
return-1;
}
if(a>b){
return1;
}
return0;
});
5.array_reduce
$raw=[1,2,3,4,5,];
//array_reduce的第三个参数是$result的初始值
array_reduce($raw,function($result,$value){
$result[$value]=$value;
return$result;
},[]);
//[1=>1,2=>2,...5=>5]
6.array_map闭包中只接受一个或者多个参数,闭包的参数数量和array_map本身的参数数量必须一致
$input=['key'=>'value'];
array_map(function($key,$value){
echo$key.$value;
},array_keys($input),$input)
//'keyvalue'
$double=function($item){
return2*$item;
}
$result=array_map($double,[1,2,3]);
//246
7.繁殖兔子
$month=12;
$fab=array();
$fab[0]=1;
$fab[1]=1;
for($i=2;$i<$month;$i++)
{
$fab[$i]=$fab[$i-1]+$fab[$i-2];
}
for($i=0;$i<$month;$i++)
{
echosprintf("第{%d}个月兔子为:{%d}",$i,$fab[$i])."<br/>";
}
8.datetime
functiongetCurMonthFirstDay($date)
{
returndate('Y-m-01',strtotime($date));
}
getCurMonthLastDay('2015-07-23')
functiongetCurMonthLastDay($date)
{
returndate('Y-m-d',strtotime(date('Y-m-01',strtotime($date)).'+1month-1day'));
}
9.加密解密
functionencrypt($data,$key)
{
$key=md5($key);
$x=0;
$len=strlen($data);
$l=strlen($key);
$char='';
for($i=0;$i<$len;$i++)
{
if($x==$l)
{
$x=0;
}
$char.=$key{$x};
$x++;
}
$str='';
for($i=0;$i<$len;$i++)
{
$str.=chr(ord($data{$i})+(ord($char{$i}))%256);
}
returnbase64_encode($str);
}
functiondecrypt($data,$key)
{
$key=md5($key);
$x=0;
$data=base64_decode($data);
$len=strlen($data);
$l=strlen($key);
$char='';
for($i=0;$i<$len;$i++)
{
if($x==$l)
{
$x=0;
}
$char.=substr($key,$x,1);
$x++;
}
$str='';
for($i=0;$i<$len;$i++)
{
if(ord(substr($data,$i,1))<ord(substr($char,$i,1)))
{
$str.=chr((ord(substr($data,$i,1))+256)-ord(substr($char,$i,1)));
}
else
{
$str.=chr(ord(substr($data,$i,1))-ord(substr($char,$i,1)));
}
}
return$str;
}
10.多维数组降级
functionarray_flatten($arr){
$result=[];
array_walk_recursive($arr,function($value)use(&$result){
$result[]=$value;
});
return$result;
}
print_r(array_flatten([1,[2,3],[4,5]]));//[1,[2,3],[4,5]]=>[1,2,3,4,5]
//varnew_array=old_array.concat(value1[,value2[,...[,valueN]]])
vartest=[1,2,3,[4,5,6],[7,8]];
[].concat.apply([],test);//[1,2,3,4,5,6,7,8]对于test数组中的每一个value,将它concat到空数组[]中去,而因为concat是Array的prototype,所以我们用一个空array作载体
vartest1=[1,2,[3,[4,[5]]]];
functionflatten(arr){
returnarr.reduce(function(pre,cur){
if(Array.isArray(cur)){
returnflatten(pre.concat(cur));
}
returnpre.concat(cur);
},[]);
}
//[1,2,3,4,5]
json_encode中文
functionjson_encode_wrapper($result)
{
if(defined('JSON_UNESCAPED_UNICODE')){
returnjson_encode($result,JSON_UNESCAPED_UNICODE|JSON_NUMERIC_CHECK);
}else{
returnpreg_replace(
array("#\\\u([0-9a-f][0-9a-f][0-9a-f][0-9a-f])#ie","/\"(\d+)\"/",),
array("iconv('UCS-2','UTF-8',pack('H4','\\1'))","\\1"),
json_encode($result)
);
}
}
12.二维数组去重
$arr=array(
array('id'=>'2','title'=>'...','ding'=>'1','jing'=>'1','time'=>'...','url'=>'...','dj'=>'...'),
array('id'=>'2','title'=>'...','ding'=>'1','jing'=>'1','time'=>'...','url'=>'...','dj'=>'...')
);
functionabout_unique($arr=array()){
/*将该种二维数组看成一维数组,则该一维数组的value值有相同的则干掉只留一个,并将该一维数组用重排后的索引数组返回,而返回的一维数组中的每个元素都是原始key值形成的关联数组*/
$keys=array();
$temp=array();
foreach($arr[0]as$k=>$arrays){
/*数组记录下关联数组的key值*/
$keys[]=$k;
}
//return$keys;/*降维*/
foreach($arras$k=>$v){
$v=join(",",$v);//降维
$temp[]=$v;
}
$temp=array_unique($temp);//去掉重复的内容
foreach($tempas$k=>$v){
/*再将拆开的数组按索引数组重新组装*/
$temp[$k]=explode(",",$v);
}
//return$temp;/*再将拆开的数组按关联数组key值重新组装*/
foreach($tempas$k=>$v){
foreach($vas$kkk=>$ck){
$data[$k][$keys[$kkk]]=$temp[$k][$kkk];
}
}
return$data;
}
13.格式化字节大小
/**
*格式化字节大小
*@paramnumber$size字节数
*@paramstring$delimiter数字和单位分隔符
*@returnstring格式化后的带单位的大小
*@author
*/
functionformat_bytes($size,$delimiter=''){
$units=array('B','KB','MB','GB','TB','PB');
for($i=0;$size>=1024&&$i<6;$i++)$size/=1024;
returnround($size,2).$delimiter.$units[$i];
}
14.3分钟前
/**
*将指定时间戳转换为截止当前的xx时间前的格式例如return'3分钟前''
*@paramstring|int$timestampunix时间戳
*@returnstring
*/
functiontime_ago($timestamp){
$etime=time()-$timestamp;
if($etime<1)return'刚刚';
$interval=array(
12*30*24*60*60=>'年前('.date('Y-m-d',$timestamp).')',
30*24*60*60=>'个月前('.date('m-d',$timestamp).')',
7*24*60*60=>'周前('.date('m-d',$timestamp).')',
24*60*60=>'天前',
60*60=>'小时前',
60=>'分钟前',
1=>'秒前'
);
foreach($intervalas$secs=>$str){
$d=$etime/$secs;
if($d>=1){
$r=round($d);
return$r.$str;
}
};
}
15.身份证号
/**
*判断参数字符串是否为天朝身份证号
*@param$id需要被判断的字符串或数字
*@returnmixedfalse或array[有内容的arrayboolean为真]
*/
functionis_citizen_id($id){
//长度效验18位身份证中的X为大写
$id=strtoupper($id);
if(!(preg_match('/^\d{17}(\d|X)$/',$id)||preg_match('/^\d{15}$/',$id))){
returnfalse;
}
//15位老号码转换为18位并转换成字符串
$Wi=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
$Ai=array('1','0','X','9','8','7','6','5','4','3','2');
$cardNoSum=0;
if(strlen($id)==16){
$id=substr(0,6).'19'.substr(6,9);
for($i=0;$i<17;$i++){
$cardNoSum+=substr($id,$i,1)*$Wi[$i];
}
$seq=$cardNoSum%11;
$id=$id.$Ai[$seq];
}
//效验18位身份证最后一位字符的合法性
$cardNoSum=0;
$id17=substr($id,0,17);
$lastString=substr($id,17,1);
for($i=0;$i<17;$i++){
$cardNoSum+=substr($id,$i,1)*$Wi[$i];
}
$seq=$cardNoSum%11;
$realString=$Ai[$seq];
if($lastString!=$realString){returnfalse;}
//地域效验
$oCity=array(11=>"北京",12=>"天津",13=>"河北",14=>"山西",15=>"内蒙古",21=>"辽宁",22=>"吉林",23=>"黑龙江",31=>"上海",32=>"江苏",33=>"浙江",34=>"安徽",35=>"福建",36=>"江西",37=>"山东",41=>"河南",42=>"湖北",43=>"湖南",44=>"广东",45=>"广西",46=>"海南",50=>"重庆",51=>"四川",52=>"贵州",53=>"云南",54=>"西藏",61=>"陕西",62=>"甘肃",63=>"青海",64=>"宁夏",65=>"新疆",71=>"台湾",81=>"香港",82=>"澳门",91=>"国外");
$City=substr($id,0,2);
$BirthYear=substr($id,6,4);
$BirthMonth=substr($id,10,2);
$BirthDay=substr($id,12,2);
$Sex=substr($id,16,1)%2;//男1女0
//$Sexcn=$Sex?'男':'女';
//地域验证
if(is_null($oCity[$City])){returnfalse;}
//出生日期效验
if($BirthYear>2078||$BirthYear<1900){returnfalse;}
$RealDate=strtotime($BirthYear.'-'.$BirthMonth.'-'.$BirthDay);
if(date('Y',$RealDate)!=$BirthYear||date('m',$RealDate)!=$BirthMonth||date('d',$RealDate)!=$BirthDay){
returnfalse;
}
returnarray('id'=>$id,'location'=>$oCity[$City],'Y'=>$BirthYear,'m'=>$BirthMonth,'d'=>$BirthDay,'sex'=>$Sex);
}
16.获取二维数组中某个key的集合
$user=array(0=>array('id'=>1,'name'=>'张三','email'=>'zhangsan@sina.com',),1=>array('id'=>2,'name'=>'李四','email'=>'lisi@163.com',),2=>array('id'=>5,'name'=>'王五','email'=>'10000@qq.com',),......);
$ids=array();$ids=array_map('array_shift',$user);
$ids=array_column($user,'id');//php5.5
$names=array();$names=array_reduce($user,create_function('$v,$w','$v[$w["id"]]=$w["name"];return$v;'));
以上所述就是本文的全部内容了,希望大家能够喜欢。