php - PHP 或 PHPUnit 或 Laravel 是否具有递归数组比较的功能?
问题描述
我的一些 PHPUnit 测试将 Facebook 称为“php-business-sdk”,因此我可以确信 Facebook 的 API 会继续按我的预期运行。例如getInsights()
在FacebookAds\Object\Ad
.
而那些 PHPUnit 测试一直在使用assertEqualsCanonicalizing
.
但是,测试仍然很脆弱;Facebook 的 API 通常 不仅会更改结果中顶级数组(关联数组的数组)的顺序,还会更改关联数组中键的顺序。
所以我真正需要的是一个assertEqualsCanonicalizing
递归版本,并且与顶级数组中关联数组的键的排序无关。
如果这样的函数已经存在(可能在 PHP、PHPUnit、Laravel 或其他地方),我宁愿不编写自己的代码。可以?
PS 下面是一个简化的结果示例:
[
{
"Spend": "$3,009",
"Campaign ID": 3335626793661,
"Reach": 37640,
"Unique Inline Link Clicks": 2368
},
{
"Spend": "$1,030",
"Campaign ID": 3335626793662,
"Reach": 1620,
"Unique Inline Link Clicks": 231
}
]
(想象下一次 API 返回相同的数据,但“Reach”写在“Spend”之前,对象的顺序也可以改变。)
PS这不是链接问题的重复,因为我专门询问如何不知道内部数组键的排序顺序。
解决方案
in_array 没有递归工作的本机方法。
但是很多人已经通过这样的助手解决了这个问题:
private function in_array_recursive($needle, $haystack, $strict = true)
{
foreach ($haystack as $value) {
if (($strict ? $value === $needle : $value == $needle) || (is_array($value) && $this->in_array_recursive($needle, $value, $strict))) {
return true;
}
}
return false;
}
推荐阅读
- xamarin - 删除 XamarinForms 中的 ActionBar 顶部标题
- python - CNN 架构中的神经元数量
- pandas - Pandas - numpy 和多个条件
- angular - 断言错误:此 TNode 不属于此 TView - Angular 从 v8 更新到 v10 之后
- r - 与 R Postgres 后端中唯一/不同的类似聚合函数
- django - 问题将 id 传递到 url 尝试在 Django 中获取
- angular - 如何减少对象分配中的重复代码
- reactjs - 使用 React 17.0.01 的后端 Spring Boot RESTful Web 服务不起作用 tomcat 8.4.25
- azure-cognitive-search - 如何停止 zh-Hans.microsoft 分析器匹配几乎任何东西
- r - 带有 IRkernels 的 jupyter notebooks 中的 Plot 中的希腊字母