【问题标题】:Multidimensional arrays comparison in PHPPHP中的多维数组比较
【发布时间】:2015-03-18 09:18:29
【问题描述】:

比较数组时The Documentation

$a == $b 相等 如果 $a 和 $b 具有相同的键/值对,则为 TRUE。

虽然与多维数组相比,情况似乎并非如此

$a = array(
  array("test"),
  array("testing"),
);
$b = array(
  array("testing"),
  array("test"),
);

var_dump($a);
var_dump($b);
var_dump($a == $b);

返回

array(2) {
  [0] =>
  array(1) {
    [0] =>
    string(4) "test"
  }
  [1] =>
  array(1) {
    [0] =>
    string(7) "testing"
  }
}
array(2) {
  [0] =>
  array(1) {
    [0] =>
    string(7) "testing"
  }
  [1] =>
  array(1) {
    [0] =>
    string(4) "test"
  }
}
bool(false)

相同的数组,不同的顺序。数组差异虽然返回正确。

这是预期的功能吗?我知道我可以与 array_diff($a,b) + array($b, $a) 进行比较。我不确定为什么 == 不起作用

【问题讨论】:

  • 因为整数键。您的数组基本上是 array( 0 => array("test"), 1 => array("testing"))array( 0 => array("testing"), 1 => array("test") ); - 它们不一样。
  • Argh 完全忽略了这一点,如果你做出这样的回答将无法接受

标签: php multidimensional-array


【解决方案1】:

这是因为你的数组在叶子节点中是不同的。

在你的第一个数组0 = test 和你的第二个数组0 = testing

【讨论】:

    【解决方案2】:

    使用 === 比较来处理键顺序。

    检查此来源:

    Compare multidimensional arrays in PHP

    问候

    【讨论】:

      【解决方案3】:

      == 符号允许以任何顺序比较数组,它将在内部对主数组进行排序并进行=== 比较。

      但是它不会对子数组进行排序,您需要在比较之前手动进行排序

      注意:见 == & === 区别details here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        相关资源
        最近更新 更多