交友中更换麦位

This commit is contained in:
2025-09-15 22:51:48 +08:00
parent 7e3fad927a
commit fb3d8c2386

View File

@@ -414,7 +414,7 @@ class Friend extends Model
$usedUsers = []; $usedUsers = [];
// 优先选择高价值且无重复用户的对 // 优先选择高价值且无重复用户的对
$heart_ids = []; $heart_ids = [];
foreach ($originalPairs as $rel) { foreach ($originalPairs as &$rel) {
// 检查当前用户对是否包含已使用的用户ID // 检查当前用户对是否包含已使用的用户ID
if (!in_array($rel['user1_id'], $usedUsers) && if (!in_array($rel['user1_id'], $usedUsers) &&
!in_array($rel['user2_id'], $usedUsers)) { !in_array($rel['user2_id'], $usedUsers)) {
@@ -441,10 +441,12 @@ class Friend extends Model
->limit($make_up_num) ->limit($make_up_num)
->order('heart_value DESC')->select(); ->order('heart_value DESC')->select();
foreach ($ranking_make_up as $rel1) { foreach ($ranking_make_up as $rel1) {
$heart_ids[] = $rel1['id']; // 如果两个用户都已使用,跳过这条记录
if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){ if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){
continue; continue;
} }
// 如果只有user1已使用将user2加入排名
if(in_array($rel1['user1_id'], $usedUsers)){ if(in_array($rel1['user1_id'], $usedUsers)){
$ranking1[] = [ $ranking1[] = [
'heart_value' => 0, 'heart_value' => 0,
@@ -453,8 +455,10 @@ class Friend extends Model
'user2_id' => $rel1['user2_id'], 'user2_id' => $rel1['user2_id'],
]; ];
$usedUsers[] = $rel1['user2_id']; $usedUsers[] = $rel1['user2_id'];
$heart_ids[] = $rel1['id'];
} }
if(in_array($rel1['user2_id'], $usedUsers)){ // 如果只有user2已使用将user1加入排名
elseif(in_array($rel1['user2_id'], $usedUsers)){
$ranking1[] = [ $ranking1[] = [
'heart_value' => 0, 'heart_value' => 0,
'id' => $rel1['id'], 'id' => $rel1['id'],
@@ -462,8 +466,10 @@ class Friend extends Model
'user2_id' => -1, 'user2_id' => -1,
]; ];
$usedUsers[] = $rel1['user1_id']; $usedUsers[] = $rel1['user1_id'];
$heart_ids[] = $rel1['id'];
} }
} }
} }
// 返回最终的排名列表 // 返回最终的排名列表
$ranking_rut = array_merge($ranking, $ranking1); $ranking_rut = array_merge($ranking, $ranking1);
@@ -476,7 +482,6 @@ class Friend extends Model
->order('heart_value DESC')->select(); ->order('heart_value DESC')->select();
if($ranking_make_up){ if($ranking_make_up){
foreach ($ranking_make_up as $rel1) { foreach ($ranking_make_up as $rel1) {
$heart_ids[] = $rel1['id'];
if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){ if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){
continue; continue;
} }
@@ -529,39 +534,45 @@ class Friend extends Model
$pit_unique = []; $pit_unique = [];
$key = 0; $key = 0;
foreach($heart_data as $value) { foreach($heart_data as $value) {
//这条数据有一个用户已经排过了,就剔除这条数据
if(count($pit) >= 6){ if(count($pit) >= 6){
break; break;
} }
// 处理两个用户都存在的情况
if($value['user1_id'] != -1 && $value['user2_id'] != -1){ if($value['user1_id'] != -1 && $value['user2_id'] != -1){
if(!in_array($value['user1_id'],$pit_unique)){ if(!in_array($value['user1_id'],$pit_unique)){
$pit[$pit_number_array_reverse[$key]] = $value['user1_id']; // 检查目标麦位是否已被占用
$pit[$pit_number_array[$pit_number_array_reverse[$key]]] = $value['user2_id']; if(!isset($pit[$pit_number_array_reverse[$key]])) {
$pit[$pit_number_array_reverse[$key]] = $value['user1_id'];
$pit[$pit_number_array[$pit_number_array_reverse[$key]]] = $value['user2_id'];
$pit_unique = array_merge($pit_unique, [$value['user1_id'], $value['user2_id']]);
}
} }
} }
// 处理只有user2存在的情况
if($value['user1_id'] == -1){ elseif($value['user1_id'] == -1 && !in_array($value['user2_id'],$pit_unique)){
if(!in_array($value['user2_id'],$pit_unique)){ // 检查该键是否已被使用
if(!isset($pit[$pit_number_array_reverse[$key]])) {
$pit[$pit_number_array_reverse[$key]] = $value['user2_id']; $pit[$pit_number_array_reverse[$key]] = $value['user2_id'];
$pit_unique[] = $value['user2_id'];
} }
} }
// 处理只有user1存在的情况
if($value['user2_id'] == -1){ elseif($value['user2_id'] == -1 && !in_array($value['user1_id'],$pit_unique)){
if(!in_array($value['user1_id'],$pit_unique)){ // 检查该键是否已被使用
if(!isset($pit[$pit_number_array_reverse[$key]])) {
$pit[$pit_number_array_reverse[$key]] = $value['user1_id']; $pit[$pit_number_array_reverse[$key]] = $value['user1_id'];
$pit_unique[] = $value['user1_id'];
} }
} }
//用户去重
$pit_unique[] = $value['user1_id'];
$pit_unique[] = $value['user2_id'];
$key++; $key++;
} }
} }
return array_flip($pit); return $pit;
} }
//换麦 //换麦
public function changePitToPosPairs($room_id,$friendPlayPit){ public function changePitToPosPairs($room_id,$friendPlayPit){
$now_pit_u = array_flip($friendPlayPit); $now_pit_u = array_flip($friendPlayPit);
@@ -682,13 +693,17 @@ class Friend extends Model
//换麦 //换麦
public function changePitToPosPair($room_id,$friendPlayPit){ public function changePitToPosPair($room_id,$friendPlayPit){
$new_pit_u = array_flip($friendPlayPit); $new_pit_u = $friendPlayPit;
//按照键值排序数组 //按照键值排序数组
ksort($new_pit_u); ksort($new_pit_u);
//查询现在麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示 //查询原有麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示
$pit_user = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7],'user_id' => ['>', 0]]) $pit_users = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7],'user_id' => ['>', 0]])
->order('pit_number ASC') ->order('pit_number ASC')
->column('pit_number,user_id'); ->field('pit_number,user_id')->select();
$pit_user = [];
foreach ($pit_users as &$value_pit_user){
$pit_user[$value_pit_user['pit_number']] = $value_pit_user['user_id'];
}
//比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“ //比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“
$result = array_diff_assoc($pit_user, $new_pit_u);//第一个数组中存在但其他数组中不存在的键/值对 $result = array_diff_assoc($pit_user, $new_pit_u);//第一个数组中存在但其他数组中不存在的键/值对
$result2 = array_diff_assoc($new_pit_u, $pit_user); $result2 = array_diff_assoc($new_pit_u, $pit_user);