arr_sort 方法
# arr_sort 方法
//对PHP数组(类似MYSQL查出来的数据)进行排序,用法:fun::arr_sort($data, array('id','asc','num'), array('val','desc','num'));
public static function arr_sort(){
$p = func_get_args();
$data = $p[0];
if(!$data || !is_array($data)) return $data;
unset($p[0]);
if(!$p) return $data;
$aTemp = [];
foreach($data as $k => $rs){
$aTemp['__key'][] = $k;
foreach($p as $v){
$aTemp[$v[0]][] = $rs[$v[0]];
}
}
foreach($p as $v){
$sc = $v[1] == 'desc' ? SORT_DESC : SORT_ASC;
if($v[2] == 'num'){
$tp = SORT_NUMERIC;
}else if($v[2] == 'str'){
$tp = SORT_STRING;
}else{//保持原样
$tp = SORT_REGULAR;
}
$par[] = &$aTemp[$v[0]];
$par[] = $sc;
$par[] = $tp;
}
$par[] = &$aTemp['__key'];
call_user_func_array('array_multisort', $par);
$ret = [];
foreach($aTemp['__key'] as $i => $k){
$ret[$k] = $data[$k];
}
return $ret;
}
#二维数组排序 用法
$arr = [
['key'=>2, 'v'=>'22'],
['key'=>3, 'v'=>'33'],
];
$arr = array_values(fun::arr_sort($arr, ['key', 'desc', 'num']));//二维数组排序
#二维数组求和
$rs = [['t'=>'aaa', 'val'=>'12'], ['t'=>'aaa2', 'val'=>'13']];
$sum = array_sum(array_column($rs, 'val'));//指定key 求和
#sum = 25;
#以下方法需要先安装 bcmacth
/**
* 数组求和,支持浮点数
* @param array $aData 数组
* @param int $digit 保留小数位数
* @return float
*/
public static function array_sum($aData, $digit = 2){
if(!$aData || !is_array($aData)){
return 0;
}
$ret = 0;
foreach($aData as $v){
$ret = bcadd($ret, $v, $digit);
}
return (float)$ret;
}
#二维数组查找
$rs = [['t'=>'aaa', 'val'=>'12'], ['t'=>'aaa2', 'val'=>'13']];
$found_key = array_search(13, array_column($rs, 'val'));
#found_key = 1 位置1表示命中
#array_column 表示从二维数据里抽出定指key 的字段值。
#array_search 表示查找目标最后出现的位置 index 判断>-1 才正确
最简单方法
$cfg2 = [
[
"id" => 11
"coins" => 40000000
"rate" => 1
"index" => 10
],
[
"id" => 15
"coins" => 80000000
"rate" => 0.5
"index" => 14
]
];
array_multisort(array_column($cfg2, 'coins'), SORT_DESC, $cfg2);
其它经典方法
if(!function_exists('p')){//业务common.php里也有此方法,兼容一下
function p(){//格式化输入数组
echo '<pre>';
$arr = debug_backtrace();
$arr = $arr[0];
echo '◆ ' . $arr['file'] . ':' . $arr['line'] . "\n";
$p = func_get_args();
func_num_args() === 1 && $p = $p[0];
print_r($p);
die();
}
}
//数组json化,非数组原样返回 PHP5.4以上版本支持
public static function json($a){
(!isset($a) || $a === '') && $a = [];
if(is_array($a)){
if(version_compare(phpversion(), '5.4.0') >= 0){//5.4以上才支持中文不转码
$a = json_encode($a, JSON_UNESCAPED_UNICODE);
}else{
$a = json_encode($a);
}
}
return $a;
}
public static function arr2str($msg){
if(is_array($msg)){
ob_start();
print_r($msg);
$msg = ob_get_clean();
}
return $msg;
}