php賦值權重 php實現根據使用者權重值分配訂單

2021-10-22 21:48:50 字數 1587 閱讀 7352

一:前言

二:實現思路

要實現根據權重分配,首先要統計使用者的總權重,訂單數/總權重 = 單個權重對應的訂單數。最後就可以根據對應的訂單數乘以權重值就可以了。另外還需注意一種情況,訂單數除總權重有餘數,這時候需要根據餘數輪詢分配資料。

三:實現**

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...