php - 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
任何想法我做错了什么?
解决方案
我不知道你需要这个函数做什么(因为两个数组元素的顺序是相同的),也不知道你用 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) 结果。
推荐阅读
- c - 如何让程序在c中只接受正整数值
- javascript - 显示 base64 编码图像的问题
- android - 如何使用 buildChildDocumentsUriUsingTree 过滤查询结果
- c++ - C++ 中 sscanf_s 的替代方案
- android - Firebase 性能监控所需的正确版本的 Google Play 服务是什么?
- javascript - 比较两个数组并根据两个数组的索引添加新键
- java - 我想在 mac 上安装 Java JDK 8,但 .bash_profile 不会检测到 JAVA_HOME
- python - Python:列表超出索引
- javascript - Css z-index 被 ngx-swiper(Angular) 打破
- amazon-web-services - AWS Lambda 在 CloudWatch 指标中写入错误的输出