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

kev*_*out -1 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'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

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

sel*_*oup 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); 
Run Code Online (Sandbox Code Playgroud)

第二:我用PHP 5.2.12和5.3.1测试了这个并且它可以工作.它呼应:

array(1) {
  ["state"]=>
  string(2) "NY"
}
Run Code Online (Sandbox Code Playgroud)

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


pin*_*hic 5

确保您的输入数组看起来真的像那样.如果您在浏览器中回显数据,则可能会遗漏空白.例如,'32 Winthrop Street'不一样' 32 Winthrop Street'.您的数组键也是如此.

你可以$array1 = array_map('trim', $array1)$array2 = array_map('trim', $array2)从值中删除开头和结尾的空白.看看这有什么不同吗?

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

  • 比较两个字符串的md5哈希值将没有任何好处.只需将值直接与"==="进行比较即可完成工作. (3认同)