common.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. * 随机红包的金额生产
  4. * @param total float 总金额
  5. * @param num float 数量
  6. * @param min float 每个人最少能收到0.01元
  7. * @return float 随机钱
  8. **/
  9. function pocket($total, $num, $min = 0.01){
  10. for ($i=1; $i<$num; $i++) {
  11. $safe_total = ($total-($num-$i)*$min)/($num-$i);
  12. $money = mt_rand($min*100,$safe_total*100)/100;
  13. $total = $total-$money;
  14. $arr['res'][$i] = array(
  15. 'i' => $i,
  16. 'money' => $money,
  17. 'total' => $total
  18. );
  19. }
  20. $arr['res'][$num] = array('i'=>$num,'money'=>$total,'total'=>0);
  21. return $arr['res'][rand(1,$num)]['money'];
  22. }
  23. /**
  24. * 数组转中文日期
  25. * @param array days [0,1,3,4,5,6,7]
  26. **/
  27. function weekdays(array $days){
  28. $weekarray = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
  29. $week = [];
  30. foreach ($days as $value) {
  31. $week[] = $weekarray[$value];
  32. }
  33. return $week;
  34. }
  35. /**
  36. * 百度地图---->腾讯地图
  37. * @param double $lat 纬度
  38. * @param double $lng 经度
  39. * @return array();
  40. */
  41. function bdMap_to_txMap($lat,$lng){
  42. $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  43. $x = $lng - 0.0065;
  44. $y = $lat - 0.006;
  45. $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
  46. $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
  47. $lng = $z * cos($theta);
  48. $lat = $z * sin($theta);
  49. return array('lng'=>$lng,'lat'=>$lat);
  50. }
  51. /**
  52. * 腾讯地图---->百度地图
  53. * @param double $lat 纬度
  54. * @param double $lng 经度
  55. */
  56. function txMap_to_bdMap($lat,$lng){
  57. $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  58. $x = $lng;
  59. $y = $lat;
  60. $z =sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $x_pi);
  61. $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi);
  62. $lng = $z * cos($theta) + 0.0065;
  63. $lat = $z * sin($theta) + 0.006;
  64. return array('lng'=>$lng,'lat'=>$lat);
  65. }
  66. /**
  67. * 根据经纬度算距离,返回结果单位是公里,先纬度,后经度
  68. * @param $lat1
  69. * @param $lng1
  70. * @param $lat2
  71. * @param $lng2
  72. * @return float|int
  73. */
  74. function getDistance($lng1,$lat1,$lng2,$lat2){
  75. $earthRadius = 6367000;
  76. $lat1 = deg2rad($lat1);
  77. $lng1 = deg2rad($lng1);
  78. $lat2 = deg2rad($lat2);
  79. $lng2 = deg2rad($lng2);
  80. $calcLongitude = $lng2 - $lng1;
  81. $calcLatitude = $lat2 - $lat1;
  82. $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
  83. $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
  84. $calculatedDistance = $earthRadius * $stepTwo;
  85. $distance = round($calculatedDistance);
  86. if($distance <= 500){
  87. return $distance.'m';
  88. }else{
  89. return round($distance/1000,1).'km';
  90. }
  91. }
  92. /**
  93. * @description:根据数据
  94. * @param {dataArr:需要分组的数据;keyStr:分组依据}
  95. * @return:
  96. */
  97. function dataGroup(array $dataArr,string $keyStr){
  98. $newArr = [];
  99. foreach ($dataArr as $val) {
  100. $newArr[$val[$keyStr]][] = $val;
  101. }
  102. return $newArr;
  103. }