PHP - 用==比较运算没有得到预期的结果

问题描述:

有了这个代码:PHP - 用==比较运算没有得到预期的结果

if($foo['bar'] == $baz) { 
    $results[] = $foo; 
} 

我永远达不到分配$results[] = $foo;(某一个值)

现在,如果我这样做(与此相同,一定值):

strcmp(trim($foo['bar']), trim($baz)); 

我得到的0结果,表示字符串其实都是平等的。那么...为什么在世界上我不能达到$results[] = $foo;

如果两个strcmp等于0,$ foo ['bar'] == $ baz是不是应该为真?我错过了什么?


顺便说一句,它只是一个特定的比较失败。使用相同的if语句的其他比较将正常工作。

例如:

当$ foo的[ '酒吧'] == '肉' 和$巴兹== '肉',我得到$结果[ '肉']

但是当$ foo的[”酒吧'] =='肉酱'和$巴兹=='肉酱'我得到$结果[]

+0

你可以发布围绕此代码的代码,并可能发送真正的值,因此它可以被测试?日Thnx。 – DeaconDesperado 2011-03-21 01:24:56

+0

@DeaconDesperado - 明白了。我只是在我的测试中包含了trim(),但没有在实际遇到麻烦的代码中叹息。 – Lothar 2011-03-21 01:38:10

观察到的行为没有意义,所以必须有一个隐藏的陷阱。让我们从trim似乎使它工作的事实开始。

您是否使用var_dump来验证$foo['bar']$baz确实具有相同的值?

+0

谢谢乔恩。我在我的测试中包含了trim(),但没有包含有问题的代码。当我看到var_dump时,我看到一个结果是一个字符更长,“去了什么?我修剪了那个......呃,哎呀”。所以谢谢你的帮助。 – Lothar 2011-03-21 01:36:54

如果你有拖阵列,说A和B,你想assing阵列B到A你这样做:

$A = $B; 

,如果你想assing只有一个元素:在

$A[] = $B[5]; // ether by index or key 

您如果您尝试将整个数组分配给阵列中的某个元素,请尝试以下操作:

$results[] = $foo['bar']; 

如果您要分配w如下所示:

$results['key1'] = $foo[]; 

结果数组中的每个键都会保存数组。

+0

其实,我正在试图像这样分配整个数组,而不仅仅是一个值。我遍历一个多维数组并基于每个子数组中是否存在特定值来构建一个新数组。它是过滤一些返回结果的函数的一部分。 – Lothar 2011-03-21 01:33:29

+0

我编辑了我最后的答案。 – SIFE 2011-03-21 10:08:30