【问题标题】:Why do two array values look the same, but don't evaluate as equal?为什么两个数组值看起来相同,但评估结果不相等?
【发布时间】:2010-04-15 12:38:25
【问题描述】:

当我比较两个数组值时,我看到两个看起来相同的字符串。 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'

这是为什么?

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

【问题讨论】:

  • 我认为它甚至不会运行,你错过了一个 ' 分隔符。
  • 您应该采取措施确保您发布的代码确实重现了问题,或者它对解决问题没有多大用处。

标签: php arrays string comparison


【解决方案1】:

首先:您的代码甚至不会运行,而是在第 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"
}

这真的只是充满了不正确的语法。就是这样。

【讨论】:

  • 我没有复制我实际测试过的代码,我输入了新代码来描述我的问题。我的问题不是代码不会运行,而是为什么一个看起来相等的字符串,而不是评估为相等。
  • 如果您不发布实际代码,我们将无法解决您的问题。
【解决方案2】:

确保您的输入数组确实是这样的。如果您在浏览器中回显数据,您可能会错过空格。例如,'32 Winthrop Street'' 32 Winthrop Street' 不同。您的数组键也是如此。

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

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

【讨论】:

  • 比较两个字符串的 md5 哈希值不会有任何好处。只需将值直接与“===”进行比较即可。
  • 天啊,这是真的。出于某种原因,我一直停留在更复杂的对象上(可能是因为整天都在处理 DOM 树;也不是那样会更容易工作)。修好了!
  • 最后还是决定添加此评论,因为我认为突出显示我最初交叉的电线的 实际 来源实际上可能很有用:md5() 或其他哈希函数是当然,这是绕过“我的输出媒体无法正确显示”的好方法。请记住,孩子们,不要想一件事(输出)并输入另一件事(比较)!
【解决方案3】:

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

【讨论】:

  • 例如,“32”和“Winthrop”之间的两个空格(而不是一个空格) - 在 HTML 中它们显示为一个空格。有时可能很难注意到。
【解决方案4】:
$array1 = ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = ('address'=>'32 Winthrop Street');

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

' 可能会让 PHP 引擎误以为它是一个字符串...然后雪上加霜的是你没有关闭“字符串”。

对我来说似乎是一个错字。

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2019-05-20
    • 2016-05-22
    相关资源
    最近更新 更多