PHP:如何根据数百个用户选项提供自定义内容


PHP: How to serve customized content based on hundreds of user options?

我正在处理一个很长很长的用户表单,然后会导致自定义显示。

最终显示必须逐段进行策划,以适应用户的输入。

我的第一次尝试是所有if陈述:

if($input_a && $input_b && $input_c !== $input_d) :
   echo result;
   if($input_a === 'example') :
      return false;
   endif;
   if($input_b !== 'example') :
      echo $input_c * $input_d;
   endif;
endif;

这变得非常混乱,尤其是当我必须在JS和PHP之间传递此逻辑的结果时。

我的下一个尝试涉及根据一些输入为每个用户构建一个自定义字符串("x"表示没有输入):

$code = array('x', 'x', 'x', 'x', 'x', 'x');
if($input_a && $input_b && $input_c !== $input_d) :
   $code[0] = 1;
   $code[1] = 1;
   if($input_a === 'example') :
      $code[2] = 1;
   else:
      $code[2] = 0;
   endif;
   if($input_b !== 'example') :
      $code[3] = 1;
   else :
      $code[3] = 0
   endif;
else :
     $code[0] = 0;
     $code[1] = 0;
endif;

因此,在上面,字符串将读作类似 '01x0' .现在,我可以根据用户的输入为其分配此代码。在逻辑中,我可以检查此代码以决定是提供某些内容块还是隐藏其他内容块。

如果我想检查第一个和第四个输入的匹配项,但不关心第二个和第三个输入,我可以这样做:

// 'x' is a placeholder for code items I don't care about
$result_option = '1xx1';
$pattern = '/[' . $code[0] . 'x][' . $code[1] . 'x][' . $code[2] . 'x]/';
if(preg_match($pattern, $result_option) :
   echo $result_option;
endif;

好的,这样就可以了。

但我觉得我在这里重新发明了轮子,最终我的代码字符串将有一百个字符长。

是否有更好的方法来提供基于数百个用户选项的自定义内容,而不涉及一百个嵌套if语句类?

编辑:

因此,为了更清楚地了解我想要完成的任务,假设填写表格。他们说他们有房子和汽车,他们有很多债务。

对于该用户,我想向他们展示有关处理债务的内容,仅此而已。

另一个用户填写表单。他们说他们租房,他们租一辆车,他们的债务适中。

对于该用户,我想显示相同的债务内容,稍作修改,因为他们的债务不那么极端。除此之外,我还想展示买房的内容和购买二手车的好处。

每个

用户都有唯一的属性组合,并且对于每个属性,系统会提供自定义内容。

我同意 Kyle 的观点 - 插入数据库,然后创建一个类来处理查询新数据库记录的数据操作。

在一个简单的例子中:

  1. 用户在页面上的表单上输入所有数据
  2. 用户提交表单
  3. 在后续页面上,您要做的第一件事是在MySQL表中创建一个(或多个)新记录并获取新创建的ID供记录
  4. 现在,您可以拥有一个类或一组类来处理每个数据点或数据集

我不太清楚你的最终目标,但我可能会使用一个模板页面来实例化上面引用的类,对于我要显示的每个数据点,我在该对象中调用一个函数来执行业务逻辑。 这不一定是直接使用 $_POST 数据更好的解决方案,但对我来说,这种方法可以帮助我以干净、简化的方式从逻辑上分解任务。(注意:这应该解决嵌套的"如果",但可能不会缩短代码本身。

更新:我实际上做了一些类似于你所说的事情,但自定义内容要少得多,我使用了一个.txt模板文件,然后基本上解析它。模板(静态):

<p>
Hi {recipientFname},<br>
{senderFname} has nominated you for membership into blah blah. As per your conversation with him, visit the site by following the below URL for your next steps.<br><br>
{choiceLines}
</p>

然后我有一个完成所有肌肉工作的类,但重要的部分在这里:

    $arr_tpl_vars = array('{salutation}',
                        '{directMessage}',
                        '{referralMessage}',
                        '{senderFname}',
                        '{parentFname}',
                        '{parentLname}',
                        '{memberFname}',
                        '{memberLname}',
                        '{recipientFname}'
    );
    $arr_tpl_data = array($this->recipient_salutation, 
                        $directMessage, 
                        $referralMessage, 
                        $this->sender_fname, 
                        $this->parent_fname, 
                        $this->parent_lname, 
                        $this->memberFname, 
                        $this->memberLname, 
                        $recipFname);
    $msg = str_replace($arr_tpl_vars, $arr_tpl_data, $msg_tmpl);

使用上面的代码,我基本上加载到模板中,向它提供要查找的字符串数组(所有可替换的内容都用 {string} 表示),并且该函数替换了所有内容。

在您的情况下,我会定义要在业务逻辑函数中使用的文本(例如:$this->收件人)...