php二维数组排序+字符串截取函数

来源:互联网 发布:sha算法 编辑:程序博客网 时间:2024/06/10 09:37

整理了两个函数,记录下来


/**

 * 对二维数组排序进行一个封装
 * @param unknown_type $dataArray        要排序的数组
 * @param unknown_type $sortInfoArray    排序信息数组,可以多个组合,格式如下:
 * array(
    array(
        'sortKey'=>'name', 'sortOrder'=>'SORT_ASC', 'sortType'=>'SORT_STRING'
    ), array(
        'sortKey'=>'size', 'sortOrder'=>'SORT_DESC', 'sortType'=>'SORT_STRING'
    )
    );
 * sortKey:$dataArray要用于排序的列名,
 * sortOrder:SORT_ASC - 按照上升顺序排序/SORT_DESC - 按照下降顺序排序
 * sortType:SORT_REGULAR - 将项目按照通常方法比较/SORT_NUMERIC - 将项目按照数值比较/SORT_STRING - 将项目按照字符串比较
 * @throws Exception
 * @return unknown
 */
function array_multisort_crm ($dataArray, $sortInfoArray)
{
    if (empty($sortInfoArray)||!is_array($sortInfoArray)) {
        throw new Exception('array_multisort_crm 函数的第二个参数格式出错');
    }
    foreach ($sortInfoArray as $sortArr) {
        if (!array_key_exists('sortKey', $sortArr)) {
            throw new Exception('array_multisort_crm 函数的第二个参数格式出错');
        }
        $sortRule[$sortArr['sortKey']] = '$'.$sortArr['sortKey'];
        if (array_key_exists('sortOrder', $sortArr)) {
            $sortRule[$sortArr['sortKey']] .= ','.$sortArr['sortOrder'];
        }
        if (array_key_exists('sortType', $sortArr)) {
            $sortRule[$sortArr['sortKey']] .= ','.$sortArr['sortType'];
        }
    }
    foreach ($dataArray as $key => $vArr) {
        foreach ($sortInfoArray as $sortArr) {
            ${$sortArr['sortKey']}[$key] = $vArr[$sortArr['sortKey']];
        }
    }
    $evalString = 'array_multisort('.implode(',', $sortRule).',$dataArray);';
    eval($evalString);
    return $dataArray;
}


/**
 * 字符串截取,支持中文和其他编码
*
* @param string $str 需要转换的字符串
* @param string $start 开始位置
* @param string $length 截取长度
* @param string $charset 编码格式
* @param string $suffix 截断字符串后缀
* @return string
*/
/**
 * 字符串截取,支持中文和其他编码,如果截取后的字符串是原来字符串尾部,则不加再加上$suffix
 * @param unknown_type $str        需要转换的字符串
 * @param unknown_type $start      开始位置
 * @param unknown_type $length     截取长度
 * @param unknown_type $suffix     截断字符串后缀
 * @param unknown_type $charset    编码格式
 * @return string
 */
function substr_ext($str, $start, $length, $suffix="", $charset="utf-8")
{
    $slice = '';
    if(function_exists("mb_substr")){
        echo "mb_substr<br>";
        $slice = mb_substr($str, $start, $length, $charset);
    }
    elseif(function_exists('iconv_substr')){
        $slice = iconv_substr($str,$start,$length,$charset);
    }
    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));
    }
    if (!preg_match("/({$slice})$/", $str)) {
        $slice = $slice.$suffix;
    }
    return $slice;
}
原创粉丝点击