我在我的网站上有用户,用户从他们的个人资料中选择他们的组1/2/3。根据他们的选择,他们被分成3个数组:
$group1_recipients[], $group2_recipients[], $group3_recipients[]
示例数据:
$group1_recipients = ["用户A","用户B","用户C"], $group2_recipients = ["用户D","用户B","用户E"], $group3_recipients = ["用户A","用户B","用户E"]
这意味着用户A选择了组1和组3。同样,用户B选择了组1、2和3。
现在,我正在创建图片,并在创建图片时选择组1/2/3。所以根据用户组的选择,我想显示/隐藏一张图片:
示例:如果我为组1和组2创建一张图片,只有选择了这些组的用户才能看到图片。而且如果一个用户选择了组1和组2,他们只能看到一张图片。没有重复。
我遵循了以下逻辑:
$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 "没有匹配的受众类型";
}
这个逻辑并不完全有效。当为所有3个组创建图片时,用户只选择了组2或组3,图片不显示。这个逻辑一旦找到一个匹配的组就离开了循环。有关如何修复这个问题的任何帮助吗?
PS:这是一个示例代码。请忽略解析/语法错误
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
看起来你对image_group和group_recipients有些混淆,并且你在使用$g而不是user
<?php //这个图片所属的组 $image_groups = [1, 2, 3]; //每个组的收件人 $group1_recipients = ["用户A","用户B","用户C"]; $group2_recipients = ["用户D","用户B","用户E"]; $group3_recipients = ["用户A","用户B","用户E"]; //所有收件人的数组 $all_groups = [1=> &$group1_recipients, 2=> &$group2_recipients, 3=> &$group3_recipients]; //用户ID $user = '用户A'; //初始设置为false $match = false; // 遍历每个image_group foreach ($image_groups as $group) { //获取groupn_recipients数组 $recipients = &$all_groups[$group]; //如果用户在收件人数组中,则将Match设置为Group if (in_array ($user, $recipients)) { $match = $group; break; } } if ($match) { echo "与组 $group 匹配\n"; } else { echo '不匹配', "\n"; } ?>这是一种方法。有很多变种。这将$match设置为false或匹配的组。