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;'));
以上所述就是本文的全部内容了,希望大家能够喜欢。