交友中更换麦位

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 = [];
// 优先选择高价值且无重复用户的对
$heart_ids = [];
foreach ($originalPairs as $rel) {
foreach ($originalPairs as &$rel) {
// 检查当前用户对是否包含已使用的用户ID
if (!in_array($rel['user1_id'], $usedUsers) &&
!in_array($rel['user2_id'], $usedUsers)) {
@@ -441,10 +441,12 @@ class Friend extends Model
->limit($make_up_num)
->order('heart_value DESC')->select();
foreach ($ranking_make_up as $rel1) {
$heart_ids[] = $rel1['id'];
// 如果两个用户都已使用,跳过这条记录
if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){
continue;
}
// 如果只有user1已使用将user2加入排名
if(in_array($rel1['user1_id'], $usedUsers)){
$ranking1[] = [
'heart_value' => 0,
@@ -453,8 +455,10 @@ class Friend extends Model
'user2_id' => $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[] = [
'heart_value' => 0,
'id' => $rel1['id'],
@@ -462,8 +466,10 @@ class Friend extends Model
'user2_id' => -1,
];
$usedUsers[] = $rel1['user1_id'];
$heart_ids[] = $rel1['id'];
}
}
}
// 返回最终的排名列表
$ranking_rut = array_merge($ranking, $ranking1);
@@ -476,7 +482,6 @@ class Friend extends Model
->order('heart_value DESC')->select();
if($ranking_make_up){
foreach ($ranking_make_up as $rel1) {
$heart_ids[] = $rel1['id'];
if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){
continue;
}
@@ -529,39 +534,45 @@ class Friend extends Model
$pit_unique = [];
$key = 0;
foreach($heart_data as $value) {
//这条数据有一个用户已经排过了,就剔除这条数据
if(count($pit) >= 6){
break;
}
// 处理两个用户都存在的情况
if($value['user1_id'] != -1 && $value['user2_id'] != -1){
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[$pit_number_array_reverse[$key]]] = $value['user2_id'];
$pit_unique = array_merge($pit_unique, [$value['user1_id'], $value['user2_id']]);
}
}
if($value['user1_id'] == -1){
if(!in_array($value['user2_id'],$pit_unique)){
}
// 处理只有user2存在的情况
elseif($value['user1_id'] == -1 && !in_array($value['user2_id'],$pit_unique)){
// 检查该键是否已被使用
if(!isset($pit[$pit_number_array_reverse[$key]])) {
$pit[$pit_number_array_reverse[$key]] = $value['user2_id'];
}
}
if($value['user2_id'] == -1){
if(!in_array($value['user1_id'],$pit_unique)){
$pit[$pit_number_array_reverse[$key]] = $value['user1_id'];
}
}
//用户去重
$pit_unique[] = $value['user1_id'];
$pit_unique[] = $value['user2_id'];
}
}
// 处理只有user1存在的情况
elseif($value['user2_id'] == -1 && !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_unique[] = $value['user1_id'];
}
}
$key++;
}
}
return array_flip($pit);
return $pit;
}
//换麦
public function changePitToPosPairs($room_id,$friendPlayPit){
$now_pit_u = array_flip($friendPlayPit);
@@ -682,13 +693,17 @@ class Friend extends Model
//换麦
public function changePitToPosPair($room_id,$friendPlayPit){
$new_pit_u = array_flip($friendPlayPit);
$new_pit_u = $friendPlayPit;
//按照键值排序数组
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')
->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);//第一个数组中存在但其他数组中不存在的键/值对
$result2 = array_diff_assoc($new_pit_u, $pit_user);