laravel - 比较 laravel 集合
问题描述
我有两个集合:“说明”和“已知”。基本上,我正在采用一组新的“说明”并检查是否有任何与“已知”不同的内容。
所以,数量并不大。我检索信息:
$Instructions = Instruction::all();
$Knowns = Known::all();
现在,我正在寻找差异,我已经尝试了这三种方法中的每一种:
$IssuesFound = $Instructions->diff($Knowns);
$IssuesFound = $Instructions->diffKeys($Knowns);
$IssuesFound = $Instructions->diffAssoc($Knowns);
问题是,“指令”或“已知”是具有 17 个属性的项目,其中任何一个属性都可以不同。我想将“指令”的属性与“已知”的匹配属性进行比较。(两个项目有相同的键,机器人项目有一个Reference
属性作为一个唯一的标识符。
我发现这些方法给了我不同的项目,但没有告诉我哪些个别属性是不匹配的。
foreach ($IssuesFound as $issue)
{
dd($issue);
}
所以像这样的方法$IssuesFound = $Instructions->diffKeys($Knowns);
会提出项目 xxx 不同,但我看不出如何找出项目的哪个属性不同。除非我开始嵌套循环并遍历所有属性——我试图避免这种情况。
我该怎么做?
提前致谢。(Laravel 5.6)
解决方案
直接来自 laravel 文档,diffAssoc 将返回您的要求:
$collection = collect([
'color' => 'orange',
'type' => 'fruit',
'remain' => 6
]);
$diff = $collection->diffAssoc([
'color' => 'yellow',
'type' => 'fruit',
'remain' => 3,
'used' => 6
]);
$diff->all();
// ['color' => 'orange', 'remain' => 6]
您从第一个集合中获得与第二个集合不同的属性,因此如果您在调用时获得 3 个属性,$diff->all()
您将知道哪些属性是不同的,因此您可以访问它们或做任何您想做的事情,如果您发布更具体的结果关于你得到什么和你正在尝试什么,我们可以提供帮助,但我认为你只是没有考虑如何使用这些方法
推荐阅读
- kotlin - Kotlin coruntines 在启动和回调中不会执行
- node.js - Node JS Express 安全路由
- swift - 如何对 SKnode 进行子类化以创建具有多个独立“通道”的场景?
- curl - 如何让 curl 返回实际的网站数据
- sql - Oracle 更改表以允许团队支持多个慈善机构,如果他们希望更改数据库以满足此要求
- angular - 有什么方法可以添加用户可以在屏幕上更改的“每页项目”属性,使用角度的 NgxPaginationModule?
- java - 如何从android查询Firebase中是否存在值数组?
- i2c - 是否可以将具有 SSI 的从设备连接到具有 I2C/SPI 的主设备?
- c# - c# Filter datatable with multiple condition
- python - 我无法使用普通 zeroMQ 推/拉模式在拉取实例上抓取/打印数据