Welcome 微信登录

首页 / 网页编程 / PHP / php基本函数汇总

1.统计数组元素个数

$arr = array( "1011,1003,1008,1001,1000,1004,1012", "1009", "1011,1003,1111");$result = array();foreach ($arr as $str) { $str_arr = explode(",", $str); foreach ($str_arr as $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. 循环删除目录
function cleanup_directory($dir) { foreach (new DirectoryIterator($dir) as $file) {if ($file->isDir()) { if (! $file->isDot()) {cleanup_directory($file->getPathname()); }} else {unlink($file->getPathname());} }rmdir($dir);}
3.无限极分类生成树
function generateTree($items){$tree = array();foreach($items as $item){if(isset($items[$item["pid"]])){$items[$item["pid"]]["son"][] = &$items[$item["id"]];}else{$tree[] = &$items[$item["id"]];}}return $tree;}function generateTree2($items){foreach($items as $item)$items[$item["pid"]]["son"][$item["id"]] = &$items[$item["id"]];return isset($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);function getTreeData($tree){foreach($tree as $t){echo $t["name"]."<br>";if(isset($t["son"])){getTreeData($t["son"]);}}}
4.数组排序 a - b 是数字数组写法 遇到字符串的时候就要
var test = ["ab", "ac", "bd", "bc"];test.sort(function(a, b) {if(a < b) {return -1;}if(a > b) {return 1;}return 0;});
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) { return 2 * $item;}$result = array_map($double, [1,2,3]);// 2 4 6
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++) { echo sprintf("第{%d}个月兔子为:{%d}",$i, $fab[$i])."<br/>"; }
8 .datetime
function getCurMonthFirstDay($date){return date("Y-m-01", strtotime($date));} getCurMonthLastDay("2015-07-23")function getCurMonthLastDay($date){return date("Y-m-d", strtotime(date("Y-m-01", strtotime($date)) . " +1 month -1 day"));}
9.加密解密
function encrypt($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);}return base64_encode($str);}function decrypt($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 . 多维数组降级
function array_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]// var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])var test = [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 作载体var test1 = [1,2,[3,[4,[5]]]];function flatten(arr) {return arr.reduce(function(pre, cur) {if(Array.isArray(cur)) {return flatten(pre.concat(cur));}return pre.concat(cur);}, []);}// [1,2,3,4,5]json_encode中文function json_encode_wrapper ($result){if(defined("JSON_UNESCAPED_UNICODE")){return json_encode($result,JSON_UNESCAPED_UNICODE|JSON_NUMERIC_CHECK);}else {return preg_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"=>"..."));function about_unique($arr=array()){ /*将该种二维数组看成一维数组,则 该一维数组的value值有相同的则干掉只留一个,并将该一维 数组用重排后的索引数组返回,而返回的一维数组中的每个元素都是 原始key值形成的关联数组*/$keys =array();$temp = array();foreach($arr[0] as $k=>$arrays) {/*数组记录下关联数组的key值*/ $keys[] = $k;}//return $keys;/*降维*/foreach($arr as $k=>$v) {$v = join(",",$v); //降维 $temp[] = $v;}$temp = array_unique($temp); //去掉重复的内容foreach ($temp as $k => $v){/*再将拆开的数组按索引数组重新组装*/ $temp[$k] = explode(",",$v); } //return $temp;/*再将拆开的数组按关联数组key值重新组装*/foreach($temp as $k=>$v) {foreach($v as $kkk=>$ck) { $data[$k][$keys[$kkk]] = $temp[$k][$kkk];}}return $data; }
13.格式化字节大小
/*** 格式化字节大小* @param number $size 字节数* @param string $delimiter 数字和单位分隔符* @return string格式化后的带单位的大小* @author */function format_bytes($size, $delimiter = "") { $units = array("B", "KB", "MB", "GB", "TB", "PB"); for ($i = 0; $size >= 1024 && $i < 6; $i++) $size /= 1024; return round($size, 2) . $delimiter . $units[$i];}
14.3分钟前
/*** 将指定时间戳转换为截止当前的xx时间前的格式 例如 return "3分钟前""* @param string|int $timestamp unix时间戳* @return string*/function time_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 ($interval as $secs => $str) {$d = $etime / $secs;if ($d >= 1) {$r = round($d);return $r . $str;}};}
15.身份证号
/*** 判断参数字符串是否为天朝身份证号* @param $id 需要被判断的字符串或数字* @return mixed false 或 array[有内容的array boolean为真]*/function is_citizen_id($id) {//长度效验 18位身份证中的X为大写$id = strtoupper($id);if(!(preg_match("/^d{17}(d|X)$/",$id) || preg_match("/^d{15}$/",$id))) { return false;}//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) {return false;}//地域效验$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])) {return false;}//出生日期效验if($BirthYear>2078 || $BirthYear<1900) {return false;}$RealDate= strtotime($BirthYear."-".$BirthMonth."-".$BirthDay);if(date("Y",$RealDate)!=$BirthYear || date("m",$RealDate)!=$BirthMonth || date("d",$RealDate)!=$BirthDay) {return false;}return array("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;"));
以上所述就是本文的全部内容了,希望大家能够喜欢。