为什么两个数组值看起来相同,但不评估为相等?

时间:2010-04-15 12:38:26

标签: php arrays string comparison

当我比较两个数组值时,我看到两个看起来相同的字符串。 php不同意。

$array1 = array('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = array('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2);

var_dump($results) 
//echos ['address'] => string(18) "32 Winthrop Street" ['state']=>'NY'

为什么会这样?

修改 请注意,这不是我正在测试的实际代码,我已经简化了代码来说明我的问题,这是关于字符串是否相等,而不是代码是否会运行。

4 个答案:

答案 0 :(得分:8)

首先:您的代码甚至不会运行,但会在第2行出现语法错误。以下是更正后的版本:

<?php
$array1 = array ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = array ('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2);

var_dump($results); 

第二:我使用PHP 5.2.12和5.3.1进行了测试,但它确实有效。它呼应:

array(1) {
  ["state"]=>
  string(2) "NY"
}

它真的只是错误的语法。就是这样。

答案 1 :(得分:5)

确保您的输入数组真的如此。如果您在浏览器中回显数据,则可能会遗漏空白。例如,'32 Winthrop Street'' 32 Winthrop Street'不同。您的数组键也是如此。

您可以$array1 = array_map('trim', $array1)$array2 = array_map('trim', $array2)从值中删除前导和尾随空格。看看这有什么不同吗?

您可以通过查看if ($array1['address'] === $array2['address'])来检查它们是否真的相同。如果评估结果为false,则表示存在差异,您只是没有看到它(请参阅binaryLV's answer详细说明可能的原因)。如果计算结果为true,您可能需要仔细查看数组键。

答案 2 :(得分:3)

值是硬编码还是来自其他来源? var_dump($array1['address'], $array2['address'])给出了什么?也许在某处有一些“看不见的”空间?

答案 3 :(得分:0)

$array1 = ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = ('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2); // remove the ' on this line 

'可能会混淆PHP引擎认为它是一个字符串...然后添加侮辱伤害你不要关闭“字符串”。

看起来像是一个错字。