一:前言
二:實現思路
要實現根據權重分配,首先要統計使用者的總權重,訂單數/總權重 = 單個權重對應的訂單數。最後就可以根據對應的訂單數乘以權重值就可以了。另外還需注意一種情況,訂單數除總權重有餘數,這時候需要根據餘數輪詢分配資料。
三:實現**
public function dispense()else{
$count = db::name('invin')->where($map)->count();
//總權重
$count_weight = $this->sum($sale_list);
//單個訂單數
$order_num = intval(floor($count / $count_weight));
//餘數
$yu_num = $count % $count_weight;
//根據權重分配
foreach ($sale_list as $value) {
$num = $value['weight'] * $order_num;
$nums = db::name('invin')
->where($map)
->order('id desc')
->limit($num)
->update(['sale_id'=>$value['id'],'dispense_time'=>time()]);
db::name('user')->where('id',$value['id'])->setinc('order_nums',$num);
$num = 0;
//輪詢餘數
if($yu_num != 0 || $type = 3){
$num = 1;//初始化乙個變數為1
for($i = 1; $i <= $yu_num; $i++)//這個是看你要輪詢多個訂單,然後迴圈
foreach ($sale_list as $vv) {
if($num > $yu_num){
return json(['code'=>1,'msg'=>'訂單分配成功']);
db::name('invin')->where($map)->order('id desc')->limit(1)->update(['sale_id'=>$vv['id'],'dispense_time'=>time()]);
db::name('user')->where('id',$vv['id'])->setinc('order_nums',1);
$num++;
return json(['code'=>0,'msg'=>'訂單分配失敗']);
//計算總權重
function sum($arr)
$total = 0;
foreach ($arr as $value) {
$total += $value['weight'];
return $total;
效果如下:
分配1061條給3個權重都為1的使用者。
很讚哦!()
php權重分配
假設有3個人 能力的權重 分別為 a 1,b 2,c 3,那麼當有6個案子的時候 a分配到1個,b分配到2個,c分配到3個,這很合理,但是當案子只有5個,或者有7個的時候,怎麼分配才算公平呢?而且案子也是乙個乙個相繼產生的,怎麼動態分配才算合理呢?我想到的是將權重大小轉換為每個案子被分配到的概率大小...
用PHP實現換膚
用php其實也可以實現簡單的 換膚 其實就是換css 當然不可能做到象asp.net 2.0那樣厲害拉 但有時也可以湊合著使用,先要準備幾個css style default.css body box box title box content menu menu active menu activ...
PHP變數賦值
php變數賦值的方式有兩種 值賦值和引用賦值。預設情況下,php中都使用值傳遞方式,即若在函式的內部改變了引數的值,也不會影響到函式外部的值。例 function change string str 改變之前 change str echo str 輸出結果為 改變之前。儘管在函式內部改變了引數 s...