【问题标题】:How to add incrementally to multidim array PHP?如何增量添加到 multidim 数组 PHP?
【发布时间】:2020-12-07 17:45:37
【问题描述】:

我正在从数据库中提取很多这样的行

$rows = [
    ['id' => 3, 'course_name' => 'GSG2', 'course_day' => 'Monday', 'course_starts_at' => '01:30:00'],
    ['id' => 2, 'course_name' => 'Look1', 'course_day' => 'Wednesday', 'course_starts_at' => '03:10:00']
]

我需要从中创建一个 multidim 数组,该数组将工作日作为键,将行数组作为值。因为即使当天是空的,我也需要钥匙在场,所以我先这样做了

$timetable = [
  ['Monday' => ''],
  ['Tuesday' => ''],
  ['Wednesday' => ''],
  ['Thursday' => ''],
  ['Friday' => ''],
];

然后我正在这样做

foreach ($rows as $row) {
  switch ($row['course_day']) {
    case "Monday":
      $timetable['Monday'] = $row;
      break;
    case "Tuesday":
      $timetable['Tuesday'] = $row;
      break;
    case "Wednesday":
      $timetable['Wednesday'] = $row;
      break;
    case "Thursday":
      $timetable['Thursday'] = $row;
      break;
    case "Friday":
      $timetable['Friday'] = $row;
      break;
  }
}

但是生成的 multidim 数组每天只有一门课程(最后一次迭代)。我尝试使用 += 而不是 = 但这没有用。请问您有什么建议吗?

【问题讨论】:

    标签: php loops multidimensional-array


    【解决方案1】:

    最简单的修改如下:

    $timetable = [
        'Monday' => [],
        'Tuesday' => [],
        'Wednesday' => [],
        'Thursday' => [],
        'Friday' => []
    ];
    
    foreach ($rows as $row) {
        $courseDay = $row['course_day'];
        if (isset($timetable[$courseDay])) {
            $timetable[$courseDay][] = $row;
        }
    }
    

    首先创建索引为工作日的时间表,如果工作日匹配,则稍后添加事件。它还允许您通过在时间表变量中添加或删除它们来限制您支持的日期。

    【讨论】:

      【解决方案2】:

      试试这个方法

      foreach ($rows as $row) {
        switch ($row['course_day']) {
          case "Monday":
            $timetable['Monday'][] = $row;
            break;
          case "Tuesday":
            $timetable['Tuesday'][] = $row;
            break;
          case "Wednesday":
            $timetable['Wednesday'][] = $row;
            break;
          case "Thursday":
            $timetable['Thursday'][] = $row;
            break;
          case "Friday":
            $timetable['Friday'][] = $row;
            break;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2012-09-09
        相关资源
        最近更新 更多