【问题标题】:Why don't these strings match!?! - PHP为什么这些字符串不匹配!?! - PHP
【发布时间】:2011-08-09 16:40:32
【问题描述】:

我有一个带有多个条件的 if 语句:

if (
    (fncIsSet($row[0]['incident']) == $line[4]
     && fncIsSet($row[0]['id']) == $line[0]
     && fncIsSet($row[0]["code"]) == $line[2]
    )
    && (
        ($GLOBALS['postCheckList'] == 2
         && $row[0]['QAResult']=='Fail'
        )
        || ($GLOBALS['postCheckList'] != 2)
    )
){

我有大量项目通过这条逻辑(5000 多个值),大约 99.9% 的项目按预期通过。

我已经调试了十几次,所以我可以确认前两个条件通过了,但第三个条件失败了:

fncIsSet($row[0]["code"]) == $line[2]

以下是它试图比较(直接从源代码复制)与它们下面的十六进制代码的变量:

Ambulance-2
Ambulance-2
41 6D 62 75 6C 61 6E 63 65 2D 32 
41 6D 62 75 6C 61 6E 63 65 2D 32 

WTF,对吧?我看不出这些不起作用的任何原因,特别是当其他非常相似的变量通过正常时(即 Ambulance-1 和 Ambulance-3)。

这是另一个例子:

Anzemet
Anzemet
41 6E 7A 65 6D 65 74 
41 6E 7A 65 6D 65 74 

【问题讨论】:

  • fncIsSet() 是做什么的?

标签: php string comparison operators


【解决方案1】:

我会赌你有尾随空格问题的甜甜圈。尝试在两端使用分隔符打印变量(管道总是好的),或使用var_dump() 深入检查变量。

【讨论】:

  • 解决了第一个问题 - 我发誓我检查过了,因为这是其他人的问题。但是,我对第二个示例“Anzemet”仍有疑问
  • 我明白了,我只是尽可能地修剪变量,这就成功了。谢谢。
【解决方案2】:

使用var_dump() 查看变量的确切内容(+ 类型),如果是字符串,还可以查看长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多