【发布时间】:2016-03-18 15:43:10
【问题描述】:
我正在处理一个很长很长的用户表单,然后会导致自定义显示。
最终的显示必须逐段进行策划,以适应用户的输入。
我的第一次尝试全是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 语句类?
编辑:
所以为了更清楚地了解我想要完成的工作,假设填写表格。他们说他们有房有车,而且负债累累。
对于那个用户,我想向他们展示有关处理债务的内容,仅此而已。
另一个用户填写表单。他们说他们租了车,还租了一辆车,而且他们的债务还算适中。
对于该用户,我想显示相同的债务内容,稍作修改,因为他们的债务不那么极端。除此之外,我还想展示有关购买房屋和购买二手车的好处的内容。
每个用户都有唯一的属性组合,并且为每个属性提供自定义内容。
【问题讨论】:
-
使用数据库,那么你就不需要做检查了——软编码比硬编码好;)
-
这数百个用户选项如何影响内容的呈现?你能举一些具体的例子吗?
-
基本上,为用户提供文本内容的帖子。但是逐段文本是根据他们的输入定制的。有些内容是全球性的——所有用户都可以看到,无论他们的输入如何——但大部分内容是个性化的。
标签: javascript php if-statement logic user-input