当我比较两个数组值时,我看到两个看起来相同的字符串。 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'
为什么会这样?
修改 请注意,这不是我正在测试的实际代码,我已经简化了代码来说明我的问题,这是关于字符串是否相等,而不是代码是否会运行。
答案 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引擎认为它是一个字符串...然后添加侮辱伤害你不要关闭“字符串”。
看起来像是一个错字。