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)
为什么是这样?
编辑 请注意,这不是我正在测试的实际代码,我已经简化了代码来说明我的问题,这是关于字符串是否相等,而不是这个代码是否会运行.
第一:你的代码甚至不会运行,但会在第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)
它真的只是错误的语法.就这样.
确保您的输入数组看起来真的像那样.如果您在浏览器中回显数据,则可能会遗漏空白.例如,'32 Winthrop Street'不一样' 32 Winthrop Street'.您的数组键也是如此.
你可以$array1 = array_map('trim', $array1)和$array2 = array_map('trim', $array2)从值中删除开头和结尾的空白.看看这有什么不同吗?
您可以通过检查来检查它们是否真的相同if ($array1['address'] === $array2['address']).如果评估为false,则存在差异,您只是没有看到它(请参阅binaryLV的答案以详细说明可能的原因).如果它的计算结果为true,您可能需要仔细查看数组键.