arr_sort 方法

  1. # arr_sort 方法
  2. //对PHP数组(类似MYSQL查出来的数据)进行排序,用法:fun::arr_sort($data, array('id','asc','num'), array('val','desc','num'));
  3. public static function arr_sort(){
  4. $p = func_get_args();
  5. $data = $p[0];
  6. if(!$data || !is_array($data)) return $data;
  7. unset($p[0]);
  8. if(!$p) return $data;
  9. $aTemp = [];
  10. foreach($data as $k => $rs){
  11. $aTemp['__key'][] = $k;
  12. foreach($p as $v){
  13. $aTemp[$v[0]][] = $rs[$v[0]];
  14. }
  15. }
  16. foreach($p as $v){
  17. $sc = $v[1] == 'desc' ? SORT_DESC : SORT_ASC;
  18. if($v[2] == 'num'){
  19. $tp = SORT_NUMERIC;
  20. }else if($v[2] == 'str'){
  21. $tp = SORT_STRING;
  22. }else{//保持原样
  23. $tp = SORT_REGULAR;
  24. }
  25. $par[] = &$aTemp[$v[0]];
  26. $par[] = $sc;
  27. $par[] = $tp;
  28. }
  29. $par[] = &$aTemp['__key'];
  30. call_user_func_array('array_multisort', $par);
  31. $ret = [];
  32. foreach($aTemp['__key'] as $i => $k){
  33. $ret[$k] = $data[$k];
  34. }
  35. return $ret;
  36. }
  1. #二维数组排序 用法
  2. $arr = [
  3. ['key'=>2, 'v'=>'22'],
  4. ['key'=>3, 'v'=>'33'],
  5. ];
  6. $arr = array_values(fun::arr_sort($arr, ['key', 'desc', 'num']));//二维数组排序
  7. #二维数组求和
  8. $rs = [['t'=>'aaa', 'val'=>'12'], ['t'=>'aaa2', 'val'=>'13']];
  9. $sum = array_sum(array_column($rs, 'val'));//指定key 求和
  10. #sum = 25;
  11. #以下方法需要先安装 bcmacth
  12. /**
  13. * 数组求和,支持浮点数
  14. * @param array $aData 数组
  15. * @param int $digit 保留小数位数
  16. * @return float
  17. */
  18. public static function array_sum($aData, $digit = 2){
  19. if(!$aData || !is_array($aData)){
  20. return 0;
  21. }
  22. $ret = 0;
  23. foreach($aData as $v){
  24. $ret = bcadd($ret, $v, $digit);
  25. }
  26. return (float)$ret;
  27. }
  28. #二维数组查找
  29. $rs = [['t'=>'aaa', 'val'=>'12'], ['t'=>'aaa2', 'val'=>'13']];
  30. $found_key = array_search(13, array_column($rs, 'val'));
  31. #found_key = 1 位置1表示命中
  32. #array_column 表示从二维数据里抽出定指key 的字段值。
  33. #array_search 表示查找目标最后出现的位置 index 判断>-1 才正确

最简单方法

  1. $cfg2 = [
  2. [
  3. "id" => 11
  4. "coins" => 40000000
  5. "rate" => 1
  6. "index" => 10
  7. ],
  8. [
  9. "id" => 15
  10. "coins" => 80000000
  11. "rate" => 0.5
  12. "index" => 14
  13. ]
  14. ];
  15. array_multisort(array_column($cfg2, 'coins'), SORT_DESC, $cfg2);

其它经典方法

  1. if(!function_exists('p')){//业务common.php里也有此方法,兼容一下
  2. function p(){//格式化输入数组
  3. echo '<pre>';
  4. $arr = debug_backtrace();
  5. $arr = $arr[0];
  6. echo '◆ ' . $arr['file'] . ':' . $arr['line'] . "\n";
  7. $p = func_get_args();
  8. func_num_args() === 1 && $p = $p[0];
  9. print_r($p);
  10. die();
  11. }
  12. }
  13. //数组json化,非数组原样返回 PHP5.4以上版本支持
  14. public static function json($a){
  15. (!isset($a) || $a === '') && $a = [];
  16. if(is_array($a)){
  17. if(version_compare(phpversion(), '5.4.0') >= 0){//5.4以上才支持中文不转码
  18. $a = json_encode($a, JSON_UNESCAPED_UNICODE);
  19. }else{
  20. $a = json_encode($a);
  21. }
  22. }
  23. return $a;
  24. }
  25. public static function arr2str($msg){
  26. if(is_array($msg)){
  27. ob_start();
  28. print_r($msg);
  29. $msg = ob_get_clean();
  30. }
  31. return $msg;
  32. }