php基本函数汇总


Posted in PHP onJuly 09, 2015

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;'));

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php 运行效率总结(提示程序速度)
Nov 26 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
ThinkPHP3.2框架操作Redis的方法分析
May 05 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
php DES加密算法实例分析
Sep 18 PHP
php写app用的框架整理
Sep 29 PHP
php+curl 发送图片处理代码分享
Jul 09 #PHP
在Debian系统下配置LNMP的教程
Jul 09 #PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 #PHP
php将html转成wml的WAP标记语言实例
Jul 08 #PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 #PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 #PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 #PHP
You might like
php设计模式小结
2013/02/15 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
统计出现最多的字符次数的js代码
2010/12/03 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
vue中轮训器的使用
2019/01/27 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
js实现一个简易计算器
2020/03/30 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
python实现图书借阅系统
2019/02/20 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
离婚上诉状范文
2015/05/23 职场文书
法律讲堂观后感
2015/06/11 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android