PHP按用户组控制图片显隐:修复多组匹配循环逻辑问题
修复图片受众分组显示逻辑缺陷
背景与需求
网站用户可在个人资料中选择组1/2/3,系统将用户划分至三个数组:$group1_recipients[]、$group2_recipients[]、$group3_recipients[]。示例数据如下:
$group1_recipients = ["user A","user B","user C"], $group2_recipients = ["user D","user B","user E"], $group3_recipients = ["user A","user B","user E"]
上述数据表示:用户A选择了组1和组3,用户B选择了组1、2、3。
创建图片时会指定目标组(如组1+组2),需实现:
- 仅属于目标组的用户可查看图片
- 同一用户即使属于多个目标组,也仅显示1张图片,无重复
现有代码缺陷
当前逻辑仅会获取第一个匹配组的受众,无法合并所有目标组的用户。例如当图片目标为全部3组时,仅组2或组3的用户无法看到图片,因为循环找到第一个匹配组(组1)后就终止,未处理后续组。
问题代码:
$groups = ["1", "2", "3"]; $match = false; foreach ($groups as $g) { if (in_array($g, $groups)) { $match = true; break; } } if(true===$match) { if($g == "1"){ $audience = $group1_recipients; } else if($g == "2"){ $audience = $group2_recipients; } else if($g == "3"){ $audience = $group3_recipients; } } else { echo "No matching audience type"; }
修复方案
核心思路是合并所有目标组的用户并去重,具体实现如下:
// 替换为图片实际指定的目标组,比如["1","2"]或["1","2","3"] $target_groups = ["1", "2", "3"]; $audience = []; // 遍历目标组,合并对应组的用户数组 foreach ($target_groups as $g) { switch($g) { case "1": $audience = array_merge($audience, $group1_recipients); break; case "2": $audience = array_merge($audience, $group2_recipients); break; case "3": $audience = array_merge($audience, $group3_recipients); break; default: // 忽略无效组 break; } } // 去重,确保同一用户仅出现一次 $audience = array_unique($audience); // 判断是否有匹配受众 if(empty($audience)) { echo "No matching audience type"; } else { // 此处添加图片显示逻辑,示例:检查当前登录用户是否在受众列表中 // if(in_array($current_logged_user, $audience)) { 显示图片 } }
关键说明
$target_groups需替换为图片实际的目标组参数,而非固定值array_merge()用于合并多个组的用户数组array_unique()实现去重,避免同一用户重复出现在受众列表中- 最终可通过检查当前登录用户是否在
$audience数组内,控制图片的显示/隐藏
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

