Laravel:将多维数组转换为集合

时间:2019-02-12 08:57:23

标签: laravel multidimensional-array collections

在我的项目中,我具有以下结构的动态形式:

- Date 1
  - Shift 1
    - Area 1
      - Cell 1
      - Cell 2
    - Area 2
      - Cell 3
      - Cell 4
  - Shift 2
    - Area 1
      - Cell 1
  ...

我从具有以下多维数组的输入中获取数据:data [index] [column],其中一列可能是:日期,班次,面积,单元格或单元格内容。

然后,我需要将此表单存储到数据库中,以便以后可以重新创建它。这很容易,因为我的数组具有表格形式:

index | Date  | Shift | Area | Cell | Cell Content
1       05.06   1       1       1         100
2       05.06   1       1       2         99
3       05.06   1       2       3         55
4       05.06   1       2       4         66
5       05.06   2       1       1         35

但是,当重新创建表单(从数据库取回表单)时,最好将此数组转换为一个集合,以便能够进行以下操作:

foreach (dates as date)
  foreach (date->shifts as shift)
    foreach (shift->areas as area)
      foreach (area->cells as cell)
         echo cell->content
      endforeach
    endforeach
  endforeach
endforeach

Laravel是否有可能?还是我需要使用旧方法:将当前元素与先例进行比较,并在不相同时中断for ??

1 个答案:

答案 0 :(得分:1)

我在这里看到的问题是所有列都存储在同一张表中,即您具有非规范化的结构。一个简单的解决方案是对数据进行规范化(可能会带来成本),然后在Laravel中定义关系将非常简单。

所以我建议您将单个表拆分为:

  • 日期(id,日期)
  • 班次(id,date_id,班次)
  • 区域(id,shift_id,区域)
  • 单元格(id,area_id,单元格)

现在,您还可以选择具有冗余数据,并将shift_id和date_id添加到单元格表中。如果您不关心节省空间,则可以用两种方式存储数据。

详细了解规范化https://www.geeksforgeeks.org/database-normalization-normal-forms/