自定义函数库


1、不区分大小写的in_array实现

function in_array_case($value,$array){
    return in_array(strtolower($value),array_map('strtolower',$array));
}



2、是否含有中文

// $str string 输入的字符
function ischinese($str){
    $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); //获取当前字符串的编码
    $string = mb_convert_encoding($str, 'UTF-8', $encode);//将字符编码改为utf-8
    $strA= trim($string);
    $lenA= strlen($strA); //检测字符串实际长度
    $lenB= mb_strlen($strA, "utf-8"); //文件的编码方式要是UTF8     
    if($lenA === $lenB) {    
        return"1";//全英文    
    }
    else 
    {    
        if($lenA % $lenB == 0){
            return"2";//全中文    
        }else {
            return"3";//中英混合    
        }    
    }
}




3、对数组进行排序。

一维数组排序(降序)  :

    说明:usort() 使用用户自定义的比较函数对数组进行排序

function my_sort($a,$b){
    if ($a > $b){
        return -1;
    }
    if ($a < $b){
        return 1;
    }
    return 0;
}
$arr = array(1,2,3,5,3,1,11,23,43,23,54,12);
usort($arr,"my_sort");//降序
var_dump($arr);

二维数组排序(按指定字段 降序)

第一种方式:
function liveTm($date1,$date2)
{
    if($date1['addtm'] > $date2['addtm'])
    {
        return -1;
    }
    return 1;
}
$infoAry = array( 
    array('id'=>1,'addtm'=>1526544195),
    array('id'=>2,'addtm'=>1519842743),
    array('id'=>3,'addtm'=>1526544260)
);
usort($infoAry, "liveTm");
var_dump($infoAry);

第二种方式:
    sort()   函数用于对数组单元从低到高进行排序。
    rsort()  函数用于对数组单元从高到低进行排序。
    asort()  函数用于对数组单元从低到高进行排序并保持索引关系。
    arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
    ksort()  函数用于对数组单元按照键名从低到高进行排序。
    krsort() 函数用于对数组单元按照键名从高到低进行排序。
/**
* 二维数组排序
*
* @param unknown_type $ary
* @param unknown_type $compareField
* @param unknown_type $seq
* @param unknown_type $sortFlag 把每一项作为数字来处理
* @return unknown
*/
public static function mySort(&$ary, $compareField, $seq='DESC', $sortFlag=SORT_NUMERIC) 
{
    $sortData = array();
   foreach($ary as $key => $value) {
       $sortData[$key] = $value[$compareField];
   }
    ($seq == 'DESC') ? arsort($sortData, $sortFlag) : asort($sortData, $sortFlag);
    $ret = array();
    foreach($sortData as $key => $value) 
    {
        $ret[$key] = $ary[$key];
    }
    $ary = $ret;
    return $ary;
}
$infoAry = array(
    array('addtm'=>1234),
   array('addtm'=>123),
   array('addtm'=>4321),
   array('addtm'=>2143)
);
mySort($infoAry, "addtm");
var_dump($infoAry);


第三种方式:PHP自带的函数(array_multisort,关联(string)键名保持不变,但数字键名会被重新索引。)

//示例数组
$arrUsers = array(
      array(
             'id'   => 1,
             'name' => '张三',
             'age'  => 25,
     ),
     array(
             'id'   => 2,
             'name' => '李四',
             'age'  => 23,
     ),
     array(
             'id'   => 3,
             'name' => '王五',
             'age'  => 40,
     ),
     array(
             'id'   => 4,
             'name' => '赵六',
             'age'  => 31,
     ),
     array(
             'id'   => 5,
             'name' => '黄七',
             'age'  => 20,
     ),
 );
 
//$arrUsers 待排序参数,`age` 二维数组字段
//根据年龄排序 ,如果要降序排序,则第二个参数改为`SORT_DESC`
//亦可根据字符串排序,只需在`SORT_ASC`后添加参数 `SORT_STRING`
array_multisort(array_column($arrUsers, 'age'),SORT_ASC,$arrUsers);
print_r($arrUsers);

4、字符串截取,支持中文和其他编码

第一种:
/**
 * 字符串截取,支持中文和其他编码
 * @static
 * @access public
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断显示字符
 * @return string
 */
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
    if(function_exists("mb_substr"))
        $slice = mb_substr($str, $start, $length, $charset);
    elseif(function_exists('iconv_substr')) 
    {
        $slice = iconv_substr($str,$start,$length,$charset);
        if(false === $slice) {
            $slice = '';
        }
    }
    else{
        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("",array_slice($match[0], $start, $length));
    }
    return $suffix ? $slice.'...' : $slice;
}


第二种:
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=false){
    if(function_exists("mb_substr")){
        if($suffix)
            return mb_substr($str, $start, $length, $charset)."...";
        else
            return mb_substr($str, $start, $length, $charset);
    }elseif(function_exists('iconv_substr')) {
        if($suffix)
            return iconv_substr($str,$start,$length,$charset)."...";
        else
            return iconv_substr($str,$start,$length,$charset);
    }
    $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
    $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
    $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
    $re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("",array_slice($match[0], $start, $length));
    if($suffix) return $slice."…";
    return $slice;
}
var_dump(msubstr("强调一点是,这里的21代表21个中文汉字,而不是sbustr中的21代表7个汉字了!",0,21,"utf-8",true));

5、PHP简单 对象(object) 与 数组(array) 的转换

/**
* 数组 转 对象
*
* @param array $arr 数组
* @return object
*/
function array_to_object($arr) {
    if (gettype($arr) != 'array') {
        return;
    }
    foreach ($arr as $k => $v) {
        if (gettype($v) == 'array' || getType($v) == 'object') {
            $arr[$k] = (object)array_to_object($v);
        }
    }
    return (object)$arr;
}

/**
* 对象 转 数组
*
* @param object $obj 对象
* @return array
*/
function object_to_array($obj) {
    $obj = (array)$obj;
    foreach ($obj as $k => $v) {
        if (gettype($v) == 'resource') {
            return;
        }
        if (gettype($v) == 'object' || gettype($v) == 'array') {
            $obj[$k] = (array)object_to_array($v);
        }
    }
    return $obj;
}

6、计算字符长度,包括中文

/* 计算字符长度,包括中文
 *
 * @param unknown_type $String
 * @return unknown
 */
function sysStrLen($String)
{
    $I = 0;
    $StringLast = array();
    $Length = strlen($String);
    while ( $I < $Length ) {
        $StringTMP = substr($String, $I, 1);
        if (ord($StringTMP) >= 224) {
            if ($I + 3 > $Length) {
                break;
            }
            $StringTMP = substr($String, $I, 3);
            $I = $I + 3;
        }
        elseif (ord($StringTMP) >= 192) {
            if ($I + 2 > $Length) {
                break;
            }
            $StringTMP = substr($String, $I, 2);
            $I = $I + 2;
        }
        else {
            $I = $I + 1;
        }
        
        $StringLast[] = $StringTMP;
    }
    
    return count($StringLast);
}

var_dump(sysStrLen("我是一个中国人,w de 英文名字是ck."));




冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论