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