重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
鉴于你提的问题,我拆分成为了两部分,假设23和3都是变量,要完成这个事情,首先要知道给每个人应该分配多少任务,然后就是分配任务的事情了
目前成都创新互联公司已为超过千家的企业提供了网站建设、域名、虚拟空间、网站托管维护、企业网站设计、汕城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
# 任务数
$m = 23;
# 模拟任务id
$order = range(1,$m);
# 用户
$user = ['小红', '小明', '小花'];
$n = count($user);
# 单人最少任务数
$min = floor($m / $n);
# 单人最多任务数
$max = $min + 1;
# 最多任务数的人数
$maxNum = $m - $min * $n;
# 每人多少个任务
$userNum = array_merge( array_fill(0, $maxNum, $max), array_fill(0, $n - $maxNum, $min) );
# 打乱
shuffle($userNum);
# 每个用户多少任务
$user = array_combine($user, $userNum);
# 分配任务
$ret = [];
foreach( $user as $_user = $_count){
# 随机分配
$ret[$_user][] = array_rand($order, $_count);
}
代码写的比较简单,而且很明显任务数太大会有问题。
如果是比较大的任务分配系统,建议采用队列,按照楼上的说轮流或随机或按权重进行分配
有什么问题的话可以互相交流,还望采纳
function getDivideNumber($number, $total, $index = 2) {
// 取平均数
$divide_number = floor($number / $total * pow(10, $index)) / pow(10, $index);
$divide_number = number_format($divide_number, $index, '.', '');
// 获取最后一个数字
$last_number = $number - $divide_number * ($total - 1);
$last_number = number_format($last_number, $index, '.', '');
// 拼装平分后的数据返回
$number_str = str_repeat($divide_number . ',', $total - 1) . $last_number;
return explode(',', $number_str);
}
$array = getDivideNumber(120, 3, $index = 0);
得到平均分配的数字数组,用遍历后入库
N个业务员有id吧,用随机数函数生成id,随机的范围靠业务员的id来确定,注意不能重复,每次随机抽取一个业务员id,分配给他一批数据,数据的id用类似方法获取