为什么这个PHP认为“email”==“domain”?

时间:2011-12-09 23:14:40

标签: php arrays

我有这个PHP:

$ec = $trimmed['emails'];//has a value of "email"
$dc = $trimmed['date'];//has a value of "timestamp"

$data = array("email","domain","timestamp");

$num = count($data);

for ($i=0; $i<$num; $i++){

    if ($data[$i] == $ec) {
        $ec = $i;
    } else if ($data[$i] == $dc) {
        $dc = $i;
    }    
}

当我运行这个PHP $ ec最终等于域的位置而不是电子邮件。此外,很明显,第一个认为“电子邮件”和“域”都相当于“电子邮件”,因为当我第一次将$ ec显示为“电子邮件”时,我回应了循环。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

因为在第二次迭代中$ec(现在是0)与"domain"进行比较,后者评估为真,用简单的var_dump( 0 == "domain");进行验证,输出{ {1}}。

正如William Van Rensselaer在下面建议的那样,您可以使用true,或查看函数array_search,这将完全符合您的目标。

示例:

===

答案 1 :(得分:3)

在循环的第一次迭代中,当$i == 0$ec设置为0时,正确。

在循环的第二次迭代时$i == 1它针对$data[1]的新值测试$ec。因此,"domain"被解释为数字(0),0 == 0true,因此$ec设置为1。