整理了两个函数,记录下来
/**
* 对二维数组排序进行一个封装* @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;
}