PHP-日常接口
说明
PHP 工具类
根据出生日期算年龄
ceil((time()-strtotime($birthday))/(60 * 60 * 24 * 365));
二维数组根据中文排序
foreach ($date as $key => $value) {
$name[$key]=iconv('UTF-8', 'GBK',$value['yllb']);
}
array_multisort($name, SORT_ASC, $date);
二维数组去重+数量
<?php
$arr = array(
array('user_id' => 100,'goods_id' => 10,'number' => 1,),
array('user_id' => 102,'goods_id' => 10,'number' => 1,),
array('user_id' => 102,'goods_id' => 10,'number' => 1,),
array('user_id' => 102,'goods_id' => 10,'number' => 1,),
);
$result = array();
foreach($arr as $val){
$key = $val['user_id'].'_'.$val['goods_id'];
if(!isset($result[$key])){
$result[$key] = $val;
}else{
$result[$key]['number'] += $val['number'];
}
}
var_dump($result);
echo '<pre>';
var_dump(array_values($result));
echo '</pre>';
?>
金额大写
/**
*数字金额转换成中文大写金额的函数
*String Int $num 要转换的小写数字或小写字符串
*return 大写字母
*小数位为两位
**/
public function num_to_rmb($num){
$c1 = "零壹贰叁肆伍陆柒捌玖";
$c2 = "分角元拾佰仟万拾佰仟亿";
//精确到分后面就不要了,所以只留两个小数位
$num = round($num, 2);
//将数字转化为整数
$num = $num * 100;
if (strlen($num) > 10) {
return "金额太大,请检查";
}
$i = 0;
$c = "";
while (1) {
if ($i == 0) {
//获取最后一位数字
$n = substr($num, strlen($num)-1, 1);
} else {
$n = $num % 10;
}
//每次将最后一位数字转化为中文
$p1 = substr($c1, 3 * $n, 3);
$p2 = substr($c2, 3 * $i, 3);
if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
$c = $p1 . $p2 . $c;
} else {
$c = $p1 . $c;
}
$i = $i + 1;
//去掉数字最后一位了
$num = $num / 10;
$num = (int)$num;
//结束循环
if ($num == 0) {
break;
}
}
$j = 0;
$slen = strlen($c);
while ($j < $slen) {
//utf8一个汉字相当3个字符
$m = substr($c, $j, 6);
//处理数字中很多0的情况,每次循环去掉一个汉字“零”
if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
$left = substr($c, 0, $j);
$right = substr($c, $j + 3);
$c = $left . $right;
$j = $j-3;
$slen = $slen-3;
}
$j = $j + 3;
}
//这个是为了去掉类似23.0中最后一个“零”字
if (substr($c, strlen($c)-3, 3) == '零') {
$c = substr($c, 0, strlen($c)-3);
}
//将处理的汉字加上“整”
if (empty($c)) {
return "零元";
}else{
return $c;
}
}
随机生成红包算法
function makeHongbao($total, $num, $min = 0.01)
{
$overPlus = $total - $num * $min; // 剩余待发钱数
$base = 0; // 总基数
// 存放所有人数据
$container = array();
// 每个人保底
for ($i = 0; $i < $num; $i++) {
// 计算比重
$weight = round(lcg_value() * 1000);
$container[$i]['weight'] = $weight; // 权重
$container[$i]['money'] = $min; // 最小值都塞进去
$base += $weight; // 总基数
}
$len = $num - 1; // 下面要计算总人数-1的数据,
for ($i = 0; $i < $len; $i++) {
$money = floor($container[$i]['weight'] / $base * $overPlus * 100) / 100; // 向下取整,否则会超出
$container[$i]['money'] += $money;
}
// 弹出最后一个元素
array_pop($container);
$result = array_column($container, 'money');
$last_one = round($total - array_sum($result), 2);
array_push($result, $last_one);
return $result;
}
var_dump(makeHongbao(20,20));
结尾
腹有诗书气自华,最是书香能致远。