如何在PHP中创建此数组?

威廉

我有一个来自数据库的查询,该查询返回一个值数组并放入$history array每个值有course_idunit_idtime_stamp

我想与course_id和分别使用另一个数组unit_ids

course_id必须有最新的time_stamp,并且每个unit_id都必须有它自己的time_stamp

每个课程中最多也需要4个单元array

(幸运的是$history,数据库中数组已经存在,ORDER BY time_stamp DESC所以我想我只需要获取time_stamp该课程的第一个单元以及每个课程的前4个单元)。

所以我需要的是:

courseListArray:
  array[0]:
  course_id: closest time_stamp
    unit_id: time_stamp
    unit_id: time_stamp
    unit_id: time_stamp
    unit_id: time_stamp
  array[1]:
  course_id: closest time_stamp
    unit_id: time_stamp
    unit_id: time_stamp
    unit_id: time_stamp
    unit_id: time_stamp

遵循数据库查询的示例:

array(6) { ["course_id"]=> string(4) "2968" [0]=> string(4) "2968" ["unit_id"]=> string(4) "3002" [1]=> string(4) "3002" ["time_stamp"]=> string(26) "2016-06-10 14:54:11.000000" [2]=> string(26) "2016-06-10 14:54:11.000000" } 

array(6) { ["course_id"]=> string(4) "2968" [0]=> string(4) "2968" ["unit_id"]=> string(4) "3006" [1]=> string(4) "3006" ["time_stamp"]=> string(26) "2016-06-10 14:41:54.000000" [2]=> string(26) "2016-06-10 14:41:54.000000" } 

array(6) { ["course_id"]=> string(4) "2740" [0]=> string(4) "2740" ["unit_id"]=> string(4) "2982" [1]=> string(4) "2982" ["time_stamp"]=> string(26) "2016-06-10 13:20:01.000000" [2]=> string(26) "2016-06-10 13:20:01.000000" } 

array(6) { ["course_id"]=> string(4) "3017" [0]=> string(4) "3017" ["unit_id"]=> string(4) "3012" [1]=> string(4) "3012" ["time_stamp"]=> string(26) "2016-06-10 13:12:19.000000" [2]=> string(26) "2016-06-10 13:12:19.000000" } 

我已经尝试了下面的代码,但未如预期的那样工作,因为array keys不能正确填写。

foreach ($history as $data) {
    if (!array_key_exists($data['course_id'], $courseList)) {
        array_push($courseList, $data['course_id']);
        $courseList[$data['course_id']] = array();
    }

    if (count($courseList[$data['course_id']]) <= 4) {
        array_push($courseList[$data['course_id']], $data['unit_id']);
    }
}
巴尔玛

您正在混合索引数组和关联数组。您应该创建$course_array一个关联数组,其键为course_id然后,该值应该是一个子数组,其中包含该课程ID的所有行。

foreach ($history as $data) {
    $cid = $data['course_id'];
    if (!isset($courseArray[$cid])) {
        $courseArray[$cid] = array();
    }
    $courseArray[$cid][$data['unit_id']] = $data['time_stamp'];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章