搜索

首页  >  问答  >  正文

使用for循环在PHP中多次切换显示/隐藏图像

我在我的网站上有用户,用户从他们的个人资料中选择他们的组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:这是一个示例代码。请忽略解析/语法错误

P粉567281015P粉567281015470 天前614

全部回复(1)我来回复

  • P粉178894235

    P粉1788942352023-09-14 09:26:30

    看起来你对image_groupgroup_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或匹配的组。

    1. 不要使用0作为组(它等同于false)
    2. 这些&符号是指针,所以数组的内容不会被复制。我假设这些数组可能会变得相当大。
    3. 在实践中,你会将它放在一个函数中
    4. 我将其展开以澄清每个步骤。

    回复
    0
  • 取消回复