如何解决在集合中添加缺失的数据行-无法解释的Laravel行为
我有一个数据表,我需要从中获取一个数组,看起来像这样:
[
['Mon',25],['Tue',13],['Thu',25]
]
我正在通过一些杂技表演来实现这一目标。在某个时候,我正在映射集合,其中添加了当天(1月1日,星期二,2周二)的数值作为键,因此以后可以sortKeys()
。
问题并不总是存在着所有的日子,我想在它们各自的位置将它们添加为0。
我的第一次尝试是foreach
在一周的某几天,如果
$collection->flatten()->search($day)
返回false,在那天之前。这可以正常工作,但是 Thu 总是会附加。即使复制和粘贴,它也永远不会在搜索中返回true,并且应该相同。正确跳过/设置了所有其他日期...
然后我在array_search
上尝试了toArray()
,并且发生了同样的事情。 Thu
永远不会返回true ...
这非常奇怪,基本上Thu == Thu
返回false
无论如何,我可以使用array_merge或类似的东西使它变得更好(或使其完全正常工作吗?)。
解决方法
这是一种实现方式。如果您的数据结构最初是不同的,例如使用日期名称/值作为键,而不是将两者都放在子数组中,则可以做得更整洁,但是我将继续讨论原始问题:
$defaultDays = collect([
['Mon',0],['Tue',['Wed',['Thu',['Fri',['Sat',['Sun',]);
$days = [
['Mon',25],13],25]
];
// Use $defaultDays to map,as we will need all seven days no matter what.
$days = $defaultDays->map(static function (array $defaultDay) use ($days) {
// Current match is the default day...
$match = $defaultDay;
foreach ($days as $day) {
if ($day[0] === $defaultDay[0]) {
$match = $day;
}
}
return $match;
});
这将导致:
Illuminate\Support\Collection {#1388
#items: array:7 [
0 => array:2 [
0 => "Mon"
1 => 25
]
1 => array:2 [
0 => "Tue"
1 => 13
]
2 => array:2 [
0 => "Wed"
1 => 0
]
3 => array:2 [
0 => "Thu"
1 => 25
]
4 => array:2 [
0 => "Fri"
1 => 0
]
5 => array:2 [
0 => "Sat"
1 => 0
]
6 => array:2 [
0 => "Sun"
1 => 0
]
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。