首页 > 解决方案 > PHPUnit 断言两个多维数组相等,但顺序不重要

问题描述

我有这两个数组

$expectedArray = [
   'mainKey1' => [
       'subKey1.1' => 'Value 1',
       'subKey1.2' => 'Value 2',
       'subKey1.3' => 'Value 3',
   ],
   'mainKey2' => [
       'subKey2.1' => 'Value 21',
       'subKey2.2' => 'Value 22',
       'subKey2.3' => 'Value 23',
   ],
];

$outputArray = [
   'mainKey1' => [
       'subKey1.1' => 'Value 1',
       'subKey1.2' => 'Value 2',
       'subKey1.3' => 'Value 3',
   ],
   'mainKey2' => [
       'subKey2.1' => 'Value 21',
       'subKey2.2' => 'Value 22',
       'subKey2.3' => 'Value 23',
   ],
];

我在这里使用与PHPUnit 相同的函数:断言两个数组相等,但元素的顺序并不重要,所以

function arrays_are_similar($a, $b) {
  // if the indexes don't match, return immediately
  if (count(array_diff_assoc($a, $b))) {
    return false;
  }
  // we know that the indexes, but maybe not values, match.
  // compare the values between the two arrays
  foreach($a as $k => $v) {
    if ($v !== $b[$k]) {
      return false;
    }
  }
  // we have identical indexes, and no unequal values
  return true;
}

但这会给我一个错误[PHPUnit\Framework\Exception] Array to string conversion

任何想法我做错了什么?

标签: phparraysmultidimensional-arrayphpunitassociative-array

解决方案


我不知道你需要这个函数做什么(因为两个数组元素的顺序是相同的),也不知道你用 PHPUnit 做什么。使用 PHP,您可以使用 === 检查两个数组是否相同。

$expectedArray = [
   'mainKey1' => [
       'subKey1.1' => 'Value 1',
       'subKey1.2' => 'Value 2',
       'subKey1.3' => 'Value 3',
   ],
   'mainKey2' => [
       'subKey2.1' => 'Value 21',
       'subKey2.2' => 'Value 22',
       'subKey2.3' => 'Value 23',
   ],
];

$outputArray = [
   'mainKey1' => [
       'subKey1.1' => 'Value 1',
       'subKey1.2' => 'Value 2',
       'subKey1.3' => 'Value 3',
   ],
   'mainKey2' => [
       'subKey2.1' => 'Value 21',
       'subKey2.2' => 'Value 22',
       'subKey2.3' => 'Value 23',
   ],
];

var_dump($outputArray === $expectedArray);  //bool(true)

通过更改数组中的一些内容来检查这一点,您将得到 bool(false) 结果。


推荐阅读