0

对此可能有一个非常简单的解决方法,但我对 php 很陌生,而且非常无知。我一直试图解决这个问题,但无济于事。这是代码:

echo $slot['slot_type'];
echo "<br><br>";
if ($slot['slot_type']='tree')          echo "This place is full of life, and can be used for hunting, gathering, logging, or other activities.";
if ($slot['slot_type']='town_hall')     echo "The town hall houses the governors, and is propriety of the King.";
if ($slot['slot_type']='farm1')     echo "Townspeople attempt to grow a selection of wild plants on these crops, hoping for a steady food supply.";
if ($slot['slot_type']='farm2')     echo "Farming is hard work, but a full storehouse of food is a great comfort.";

第一行echo $slot['slot_type'];是我试图理解为什么我的“if”语句不起作用的尝试。但是,它会打印正确的字符串,在本例中为“tree”。

因此,在实践中,浏览器不会打印建议的文本字符串之一,而是打印所有四个字符串,就好像它完全忽略了我的 IF 语句一样。再次,很抱歉问了一个看起来如此愚蠢的问题。

4

6 回答 6

4

你需要像这样使用它:

if ($slot['slot_type']=='tree')

您正在将值插入$slot['slot_type']而不是进行比较。

于 2012-07-27T14:53:02.497 回答
3

您在语句中使用了赋值运算符=, if。您应该使用比较运算符==.

详细说明这是如何工作的:该if语句将评估给定的条件以查看它是否匹配。使用您当前的赋值运算符,PHP 引擎将实际完成该命令(即,值分配tree给您的slot_type),因为该命令成功完成,它返回 true。if然后执行该语句的其余部分。其余的if语句也会发生同样的情况(因为您正在将值重新分配给您的slot_type没有错误的语句),然后它也会执行其他分支。

于 2012-07-27T14:53:28.430 回答
3

您需要将所有单曲更改===或其他一些逻辑检查。

您实际上所做的是$slot['slot_type']在您的条件右侧分配值,这些值将始终返回 true。

在这里阅读 php 手册http://uk.php.net/manual/en/language.operators.php

顺便说一句,使用语句if创建结构可能会更好。switch

于 2012-07-27T14:56:31.533 回答
1

我的看法:始终在选项卡中打开 php.net:

http://uk3.php.net/manual/en/language.operators.assignment.php

http://uk3.php.net/manual/en/language.operators.comparison.php

于 2012-07-27T14:56:06.873 回答
1

将 = 更改为 == 。this: = 仅用于赋予变量值(赋值),而 this == 用于将其与某物进行比较。

于 2012-07-27T14:59:23.677 回答
0

案例1:=(分配)

$var = 'hello';

案例2:==

类型杂耍后的平等

if(0 == "a") {
    print("hi");
}

* 将打印 "hi" 因为字符串 "a" 实际上会被 PHP 转换为 0

案例3:===

身份测试(类型必须相同)

if(0 === "a"){
    print("hi");
}

*不会打印“hi”,因为这两个操作数显然不是同一类型。

在您的情况下,您希望案例 2 来测试是否相等,或者您可以使用案例 3。

于 2012-07-27T14:58:57.793 回答