自定义函数

<pre>
<?php

/**

  • @param $arr
  • @param $key_name
  • @return array
  • 将数据库中查出的列表以指定的 id 作为数组的键名
    */
    function convert_arr_key($arr, $key_name)
    {
    $arr2 = array();
    foreach($arr as $key => $val){
    $arr2[$val[$key_name]] = $val;
    }
    return $arr2;
    }

function encrypt($str){
return md5(C("AUTH_CODE").$str);
}

/**

  • 获取数组中的某一列
  • @param type $arr 数组
  • @param type $key_name 列名
  • @return type 返回那一列的数组
    */
    function get_arr_column($arr, $key_name)
    {
    $arr2 = array();
    foreach($arr as $key => $val){
    $arr2[] = $val[$key_name];
    }
    return $arr2;
    }

/**

  • 获取url 中的各个参数 类似于 pay_code=alipay&bank_code=ICBC-DEBIT
  • @param type $str
  • @return type
    */
    function parse_url_param($str){
    $data = array();
    $parameter = explode('&',end(explode('?',$str)));
    foreach($parameter as $val){
    $tmp = explode('=',$val);
    $data[$tmp[0]] = $tmp[1];
    }
    return $data;
    }

/**

  • 二维数组排序
  • @param $arr
  • @param $keys
  • @param string $type
  • @return array
    */
    function array_sort($arr, $keys, $type = 'desc')
    {
    $key_value = $new_array = array();
    foreach ($arr as $k => $v) {
    $key_value[$k] = $v[$keys];
    }
    if ($type == 'asc') {
    asort($key_value);
    } else {
    arsort($key_value);
    }
    reset($key_value);
    foreach ($key_value as $k => $v) {
    $new_array[$k] = $arr[$k];
    }
    return $new_array;
    }

/**

  • 多维数组转化为一维数组
  • @param 多维数组
  • @return array 一维数组
    */
    function array_multi2single($array)
    {
    static $result_array = array();
    foreach ($array as $value) {
    if (is_array($value)) {
    array_multi2single($value);
    } else
    $result_array [] = $value;
    }
    return $result_array;
    }

/**

  • 友好时间显示
  • @param $time
  • @return bool|string
    */
    function friend_date($time)
    {
    if (!$time)
    return false;
    $fdate = '';
    $d = time() - intval($time);
    $ld = $time - mktime(0, 0, 0, 0, 0, date('Y')); //得出年
    $md = $time - mktime(0, 0, 0, date('m'), 0, date('Y')); //得出月
    $byd = $time - mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')); //前天
    $yd = $time - mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); //昨天
    $dd = $time - mktime(0, 0, 0, date('m'), date('d'), date('Y')); //今天
    $td = $time - mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')); //明天
    $atd = $time - mktime(0, 0, 0, date('m'), date('d') + 2, date('Y')); //后天
    if ($d == 0) {
    $fdate = '刚刚';
    } else {
    switch ($d) {
    case $d < $atd:
    $fdate = date('Y年m月d日', $time);
    break;
    case $d < $td:
    $fdate = '后天' . date('H:i', $time);
    break;
    case $d < 0:
    $fdate = '明天' . date('H:i', $time);
    break;
    case $d < 60:
    $fdate = $d . '秒前';
    break;
    case $d < 3600:
    $fdate = floor($d / 60) . '分钟前';
    break;
    case $d < $dd:
    $fdate = floor($d / 3600) . '小时前';
    break;
    case $d < $yd:
    $fdate = '昨天' . date('H:i', $time);
    break;
    case $d < $byd:
    $fdate = '前天' . date('H:i', $time);
    break;
    case $d < $md:
    $fdate = date('m月d日 H:i', $time);
    break;
    case $d < $ld:
    $fdate = date('m月d日', $time);
    break;
    default:
    $fdate = date('Y年m月d日', $time);
    break;
    }
    }
    return $fdate;
    }

/**

  • 返回状态和信息
  • @param $status
  • @param $info
  • @return array
    */
    function arrayRes($status, $info, $url = "")
    {
    return array("status" => $status, "info" => $info, "url" => $url);
    }

/**

  • @param $arr
  • @param $key_name
  • @param $key_name2
  • @return array
  • 将数据库中查出的列表以指定的 id 作为数组的键名 数组指定列为元素 的一个数组
    */
    function get_id_val($arr, $key_name,$key_name2)
    {
    $arr2 = array();
    foreach($arr as $key => $val){
    $arr2[$val[$key_name]] = $val[$key_name2];
    }
    return $arr2;
    }

/**

  • 自定义函数 判断 用户选择 从下面的列表中选择 可选值列表:不能为空
  • @param type $attr_values
  • @return boolean
    */
    function checkAttrValues($attr_values)
    {
    if((trim($attr_values) == '') && ($_POST['attr_input_type'] == '1'))
    return false;
    else
    return true;
    }

// 定义一个函数getIP() 客户端IP,
function getIP(){
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";
return $ip;
}
// 服务器端IP
function serverIP(){
return gethostbyname($_SERVER["SERVER_NAME"]);
}

/**

  • 自定义函数递归的复制带有多级子目录的目录
  • 递归复制文件夹
  • @param type $src 原目录
  • @param type $dst 复制到的目录
    */
    //参数说明:
    //自定义函数递归的复制带有多级子目录的目录
    function recurse_copy($src, $dst)
    {
    $now = time();
    $dir = opendir($src);
    @mkdir($dst);
    while (false !== $file = readdir($dir)) {
    if (($file != '.') && ($file != '..')) {
    if (is_dir($src . '/' . $file)) {
    recurse_copy($src . '/' . $file, $dst . '/' . $file);
    }
    else {
    if (file_exists($dst . DIRECTORY_SEPARATOR . $file)) {
    if (!is_writeable($dst . DIRECTORY_SEPARATOR . $file)) {
    exit($dst . DIRECTORY_SEPARATOR . $file . '不可写');
    }
    @unlink($dst . DIRECTORY_SEPARATOR . $file);
    }
    if (file_exists($dst . DIRECTORY_SEPARATOR . $file)) {
    @unlink($dst . DIRECTORY_SEPARATOR . $file);
    }
    $copyrt = copy($src . DIRECTORY_SEPARATOR . $file, $dst . DIRECTORY_SEPARATOR . $file);
    if (!$copyrt) {
    echo 'copy ' . $dst . DIRECTORY_SEPARATOR . $file . ' failed
    ';
    }
    }
    }
    }
    closedir($dir);
    }

// 递归删除文件夹
function delFile($dir,$file_type='') {
if(is_dir($dir)){
$files = scandir($dir);
//打开目录 //列出目录中的所有文件并去掉 . 和 ..
foreach($files as $filename){
if($filename!='.' && $filename!='..'){
if(!is_dir($dir.'/'.$filename)){
if(empty($file_type)){
unlink($dir.'/'.$filename);
}else{
if(is_array($file_type)){
//正则匹配指定文件
if(preg_match($file_type[0],$filename)){
unlink($dir.'/'.$filename);
}
}else{
//指定包含某些字符串的文件
if(false!=stristr($filename,$file_type)){
unlink($dir.'/'.$filename);
}
}
}
}else{
delFile($dir.'/'.$filename);
rmdir($dir.'/'.$filename);
}
}
}
}else{
if(file_exists($dir)) unlink($dir);
}
}

/**

  • 多个数组的笛卡尔积

  • @param unknown_type $data
    */
    function combineDika() {
    $data = func_get_args();
    $data = current($data);
    $cnt = count($data);
    $result = array();
    $arr1 = array_shift($data);
    foreach($arr1 as $key=>$item)
    {
    $result[] = array($item);
    }

    foreach($data as $key=>$item)
    {
    $result = combineArray($result,$item);
    }
    return $result;
    }

/**

  • 两个数组的笛卡尔积
  • @param unknown_type $arr1
  • @param unknown_type $arr2
    /
    function combineArray($arr1,$arr2) {
    $result = array();
    foreach ($arr1 as $item1)
    {
    foreach ($arr2 as $item2)
    {
    $temp = $item1;
    $temp[] = $item2;
    $result[] = $temp;
    }
    }
    return $result;
    }
    /
    *
  • 将二维数组以元素的某个值作为键 并归类数组
  • array( array('name'=>'aa','type'=>'pay'), array('name'=>'cc','type'=>'pay') )
  • array('pay'=>array( array('name'=>'aa','type'=>'pay') , array('name'=>'cc','type'=>'pay') ))
  • @param $arr 数组
  • @param $key 分组值的key
  • @return array
    */
    function group_same_key($arr,$key){
    $new_arr = array();
    foreach($arr as $k=>$v ){
    $new_arr[$v[$key]][] = $v;
    }
    return $new_arr;
    }

/**

  • 获取随机字符串
  • @param int $randLength 长度
  • @param int $addtime 是否加入当前时间戳
  • @param int $includenumber 是否包含数字
  • @return string
    */
    function get_rand_str($randLength=6,$addtime=1,$includenumber=0){
    if ($includenumber){
    $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789';
    }else {
    $chars='abcdefghijklmnopqrstuvwxyz';
    }
    $len=strlen($chars);
    $randStr='';
    for ($i=0;$i<$randLength;$i++){
    $randStr.=$chars[rand(0,$len-1)];
    }
    $tokenvalue=$randStr;
    if ($addtime){
    $tokenvalue=$randStr.time();
    }
    return $tokenvalue;
    }

/**

  • CURL请求
  • @param $url 请求url地址
  • @param $method 请求方法 get post
  • @param null $postfields post数据数组
  • @param array $headers 请求header信息
  • @param bool|false $debug 调试开启 默认false
  • @return mixed
    /
    function httpRequest($url, $method, $postfields = null, $headers = array(), $debug = false) {
    $method = strtoupper($method);
    $ci = curl_init();
    /
    Curl settings /
    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /
    在发起连接前等待的时间,如果设置为0,则无限等待 /
    curl_setopt($ci, CURLOPT_TIMEOUT, 7); /
    设置cURL允许执行的最长秒数 /
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
    switch ($method) {
    case "POST":
    curl_setopt($ci, CURLOPT_POST, true);
    if (!empty($postfields)) {
    $tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
    curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);
    }
    break;
    default:
    curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /
    //设置请求方式 /
    break;
    }
    $ssl = preg_match('/^https:///i',$url) ? TRUE : FALSE;
    curl_setopt($ci, CURLOPT_URL, $url);
    if($ssl){
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
    curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在
    }
    //curl_setopt($ci, CURLOPT_HEADER, true); /
    启用时会将头文件的信息作为数据流输出/
    curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/
    指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的/
    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ci, CURLINFO_HEADER_OUT, true);
    /
    curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * COOKIE带过去* */
    $response = curl_exec($ci);
    $requestinfo = curl_getinfo($ci);
    $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
    if ($debug) {
    echo "=====post data======\r\n";
    var_dump($postfields);
    echo "=====info===== \r\n";
    print_r($requestinfo);
    echo "=====response=====\r\n";
    print_r($response);
    }
    curl_close($ci);
    return $response;
    //return array($http_code, $response,$requestinfo);
    }

/**

  • 过滤数组元素前后空格 (支持多维数组)
  • @param $array 要过滤的数组
  • @return array|string
    */
    function trim_array_element($array){
    if(!is_array($array))
    return trim($array);
    return array_map('trim_array_element',$array);
    }

/**

  • 检查手机号码格式
  • @param $mobile 手机号码
    */
    function check_mobile($mobile){
    if(preg_match('/1[34578]\d{9}$/',$mobile))
    return true;
    return false;
    }

/**

  • 检查邮箱地址格式
  • @param $email 邮箱地址
    */
    function check_email($email){
    if(filter_var($email,FILTER_VALIDATE_EMAIL))
    return true;
    return false;
    }

/**

  • 实现中文字串截取无乱码的方法
    */
    function getSubstr($string, $start, $length) {
    if(mb_strlen($string,'utf-8')>$length){
    $str = mb_substr($string, $start, $length,'utf-8');
    return $str.'...';
    }else{
    return $string;
    }
    }

/**

  • 判断当前访问的用户是 PC端 还是 手机端 返回true 为手机端 false 为PC 端

  • @return boolean
    /
    /
    *
      * 是否移动端访问访问
      *
      * @return bool
      */
    function isMobile()
    {
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
    return true;

    // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset ($_SERVER['HTTP_VIA']))
    {
    // 找不到为flase,否则为true
    return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
    }
    // 脑残法,判断手机发送的客户端标志,兼容性有待提高
    if (isset ($_SERVER['HTTP_USER_AGENT']))
    {
    $clientkeywords = array ('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');
    // 从HTTP_USER_AGENT中查找手机浏览器的关键字
    if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
    return true;
    }
    // 协议法,因为有可能不准确,放到最后判断
    if (isset ($_SERVER['HTTP_ACCEPT']))
    {
    // 如果只支持wml并且不支持html那一定是移动设备
    // 如果支持wml和html但是wml在html之前则是移动设备
    if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
    {
    return true;
    }
    }
    return false;
    }

//php获取中文字符拼音首字母
function getFirstCharter($str){
if(empty($str))
{
return '';
}
$fchar=ord($str{0});
if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0});
$s1=iconv('UTF-8','gb2312',$str);
$s2=iconv('gb2312','UTF-8',$s1);
$s=$s2==$str?$s1:$str;
$asc=ord($s{0})*256+ord($s{1})-65536;
if($asc>=-20319&&$asc<=-20284) return 'A';
if($asc>=-20283&&$asc<=-19776) return 'B';
if($asc>=-19775&&$asc<=-19219) return 'C';
if($asc>=-19218&&$asc<=-18711) return 'D';
if($asc>=-18710&&$asc<=-18527) return 'E';
if($asc>=-18526&&$asc<=-18240) return 'F';
if($asc>=-18239&&$asc<=-17923) return 'G';
if($asc>=-17922&&$asc<=-17418) return 'H';
if($asc>=-17417&&$asc<=-16475) return 'J';
if($asc>=-16474&&$asc<=-16213) return 'K';
if($asc>=-16212&&$asc<=-15641) return 'L';
if($asc>=-15640&&$asc<=-15166) return 'M';
if($asc>=-15165&&$asc<=-14923) return 'N';
if($asc>=-14922&&$asc<=-14915) return 'O';
if($asc>=-14914&&$asc<=-14631) return 'P';
if($asc>=-14630&&$asc<=-14150) return 'Q';
if($asc>=-14149&&$asc<=-14091) return 'R';
if($asc>=-14090&&$asc<=-13319) return 'S';
if($asc>=-13318&&$asc<=-12839) return 'T';
if($asc>=-12838&&$asc<=-12557) return 'W';
if($asc>=-12556&&$asc<=-11848) return 'X';
if($asc>=-11847&&$asc<=-11056) return 'Y';
if($asc>=-11055&&$asc<=-10247) return 'Z';
return null;
}
</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容