【问题标题】:Laravel: convert multidimensional array to collectionLaravel:将多维数组转换为集合
【发布时间】:2019-07-05 20:51:30
【问题描述】:

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

- 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:

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?

【问题讨论】:

    标签: laravel multidimensional-array collections


    【解决方案1】:

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

    所以我建议你把你的单表拆分成:

    • 日期(id、日期)
    • 班次(id、date_id、班次)
    • 区域(id、shift_id、区域)
    • 细胞(id、area_id、细胞)

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

    阅读更多关于标准化https://www.geeksforgeeks.org/database-normalization-normal-forms/

    【讨论】:

    • 是的,你是对的。我在这张表中有多余的数据。需要考虑更多。
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2016-05-12
    • 2018-05-03
    • 2019-08-10
    • 2018-08-11
    • 2017-06-30
    • 2019-01-05
    相关资源
    最近更新 更多