使用 if & elseif 在 PHP 中创建数据驱动的多级 if 语句
Posted
技术标签:
【中文标题】使用 if & elseif 在 PHP 中创建数据驱动的多级 if 语句【英文标题】:Creating a data-driven multi-level if statement in PHP using if & elseif 【发布时间】:2012-01-17 14:05:28 【问题描述】:这是一个相当复杂的问题,所以我会尽力正确解释它。
我正在开发一个 html 电子邮件模板,该模板将被上传到基于 flex 的网络应用程序中,但我将尝试在我的示例中使用通用变量。
问题: 我有一个图像选项,用户可以从图像库中为他们的模板选择。当用户选择图像时,将根据所选图像加载 3 个属性,我们将它们称为 X、Y、Z。只有六个图像可用,我将它们的所有 URL 列表如下:
$image_1 = '.../image1.jpg';
$image_2 = '.../image2.jpg';
$image_3 = '.../image3.jpg';
等等,所有硬编码的 url 都由某个变量表示。
我的代码大概是这样的:
//这是在做出选择并呈现页面后打印图像的位置。
<img src="<?=$fields['mainImage']?>" /> //Pre-selection, and post image selection that <?=$fields['mainImage']?> will be the URL.
// 这是我尝试在图像加载的正下方添加一些逻辑的地方。这个 if 语句实际上会触发一个变量来爬取特定的数据数组并打印与选择的图像相关的特定数据(X、Y、Z,如上所述)。但为了不仅保持简单并检查初始逻辑的功能,我只是在此示例中重复三个单独的语句。
<?
$fields['mainImage'] = $mainImage;
if ($mainImage = $image_1)
echo 'The first one works';
elseif ($mainImage = $image_2)
echo 'Yay the second data string loads!';
else
echo 'O fart';
?>
结果: 在上面的示例中,无论用户选择第一张图像还是第三张图像,它都会加载“第一个有效”,就好像它无法处理我最初的 if 语句之外的任何信息一样。是否有我不知道的语法错误?或者也许是我的逻辑错误?这是标准 if 语句的一个非常基本的示例,但我很困惑为什么它没有按应有的方式运行,并且希望得到一些建议/反馈。
【问题讨论】:
【参考方案1】:您将=
与==
混淆了。
见http://www.php.net/manual/en/language.operators.comparison.php。
【讨论】:
【参考方案2】:当您实际上想要使用比较运算符 ==
时,您正在使用赋值运算符 (=
)。
赋值运算符将参数右侧的操作数的值分配给左侧的变量。例如,您正在这样做:
if ($mainImage = $image_1) // do stuff
这会将$image_1 的内容复制到$mainImage 中。然后评估 $mainImage 的真值 - 如果提供了合适的值(非零整数、非空字符串或 TRUE 布尔值),则将输入第一个块。相当于写if ($image_1)
。
你真正想要的是这个:
if ($mainImage == $image_1) // do stuff
这将正确测试 $mainImage 和 $image_1 的相等性,就像您在上面尝试做的那样。
【讨论】:
@Oil Charlesworth & Pete171,感谢您的时间和投入。我其实有 @Oil Charlesworth & Pete171,感谢您的时间和投入。我实际上尝试过 == 无济于事,但感谢您指出我的语法错误并且现在已修复,但该语句仍然无法正常工作。最终使它正常工作的是消除了 $fields['mainImage'] = $mainImage 声明。通过将 if ($mainImage = $image_1) 替换为原始 if ($fields['mainImage'] = $image_1) 它可以正常运行......不太清楚为什么它不喜欢我的缩短变量。干杯。以上是关于使用 if & elseif 在 PHP 中创建数据驱动的多级 if 语句的主要内容,如果未能解决你的问题,请参考以下文章
使用Codeigniter的多个IF,ELSEIF语句和&&运算符