如何将二维数组按年月分组生成新的数组结构?

2026-06-09 16:151阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1016个文字,预计阅读时间需要5分钟。

如何将二维数组按年月分组生成新的数组结构?

要实现的效果:创建一个数组,包含从2023年开始,每个月的日期对应的数据,数据包括:id(唯一标识)、billdtimes(时间戳)、month(月份)、price(价格)、years(年份)、wuyeId(物业ID)、communityId(社区ID)、unitNumber(单元号)、buildingId(楼栋ID)。

简化后的内容:创建数组,从2023年1月开始,每月数据如下:[ {id: 0, billdtimes: 1672502400, month: 1, price: 8.00, years: 2023, wuyeId: 1, communityId: 3, unitNumber: 2, buildingId: 1}, // ... 后续月份的数据]

要实现的效果:

Array ( [2023---年份] => Array ( [1--月份:] => Array ( [0] => Array ( [id] => 28 [billdtimes] => 1672502400 [month] => 1 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) [1] => Array ( [id] => 31 [billdtimes] => 1672502400 [month] => 1 [price] => 3.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) ) [2] => Array ( [0] => Array ( [id] => 29 [billdtimes] => 1675180800 [month] => 2 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1675180800 [billEndtime] => 1677513600 ) ) [3] => Array ( [0] => Array ( [id] => 30 [billdtimes] => 1677600000 [month] => 3 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1677600000 [billEndtime] => 1680192000 ) ) [4] => Array ( [0] => Array ( [id] => 6 [billdtimes] => 1680313031 [month] => 4 [price] => 6.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [1] => Array ( [id] => 7 [billdtimes] => 1680313031 [month] => 4 [price] => 1.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [2] => Array ( [id] => 8 [billdtimes] => 1680313031 [month] => 4 [price] => 2.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) ) ) [2022] => Array ( [12] => Array ( [0] => Array ( [id] => 11 [billdtimes] => 1669859617 [month] => 12 [price] => 6.00 [years] => 2022 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1669859617 [billEndtime] => 1672365217 ) ) ) )

select代码数据

Array ( [0] => Array ( [id] => 28 [billdtimes] => 1672502400 [month] => 1 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) [1] => Array ( [id] => 31 [billdtimes] => 1672502400 [month] => 1 [price] => 3.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) [2] => Array ( [id] => 29 [billdtimes] => 1675180800 [month] => 2 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1675180800 [billEndtime] => 1677513600 ) [3] => Array ( [id] => 30 [billdtimes] => 1677600000 [month] => 3 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1677600000 [billEndtime] => 1680192000 ) [4] => Array ( [id] => 6 [billdtimes] => 1680313031 [month] => 4 [price] => 6.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [5] => Array ( [id] => 7 [billdtimes] => 1680313031 [month] => 4 [price] => 1.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [6] => Array ( [id] => 8 [billdtimes] => 1680313031 [month] => 4 [price] => 2.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [7] => Array ( [id] => 11 [billdtimes] => 1669859617 [month] => 12 [price] => 6.00 [years] => 2022 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1669859617 [billEndtime] => 1672365217 ) )


实现代码:

如何将二维数组按年月分组生成新的数组结构?

sonlist 查询的元数据 使用&引用方法实现

// 创建基于主键的数组引用 $refer = array(); foreach ($sonlist as $key => $data) { $refer[$data["years"]][$data["month"]][] = &$sonlist[$key]; }



public function getFormatMenus($map = [], $field = '*') { $list = $this->field($field)->where($map)->select()->order('sort asc')->toArray(); return $list ? $list : []; } public function listToTree(array $list) { $tree = array(); $pk = 'id'; $pid = 'pid'; $root = 0; $child = 'children'; if (is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] = &$list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] = &$list[$key]; } else { if (isset($refer[$parentId])) { $parent = &$refer[$parentId]; $parent['childs'][] = $data['id']; $parent[$child][] = &$list[$key]; } } } } return $tree; }

本文共计1016个文字,预计阅读时间需要5分钟。

如何将二维数组按年月分组生成新的数组结构?

要实现的效果:创建一个数组,包含从2023年开始,每个月的日期对应的数据,数据包括:id(唯一标识)、billdtimes(时间戳)、month(月份)、price(价格)、years(年份)、wuyeId(物业ID)、communityId(社区ID)、unitNumber(单元号)、buildingId(楼栋ID)。

简化后的内容:创建数组,从2023年1月开始,每月数据如下:[ {id: 0, billdtimes: 1672502400, month: 1, price: 8.00, years: 2023, wuyeId: 1, communityId: 3, unitNumber: 2, buildingId: 1}, // ... 后续月份的数据]

要实现的效果:

Array ( [2023---年份] => Array ( [1--月份:] => Array ( [0] => Array ( [id] => 28 [billdtimes] => 1672502400 [month] => 1 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) [1] => Array ( [id] => 31 [billdtimes] => 1672502400 [month] => 1 [price] => 3.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) ) [2] => Array ( [0] => Array ( [id] => 29 [billdtimes] => 1675180800 [month] => 2 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1675180800 [billEndtime] => 1677513600 ) ) [3] => Array ( [0] => Array ( [id] => 30 [billdtimes] => 1677600000 [month] => 3 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1677600000 [billEndtime] => 1680192000 ) ) [4] => Array ( [0] => Array ( [id] => 6 [billdtimes] => 1680313031 [month] => 4 [price] => 6.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [1] => Array ( [id] => 7 [billdtimes] => 1680313031 [month] => 4 [price] => 1.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [2] => Array ( [id] => 8 [billdtimes] => 1680313031 [month] => 4 [price] => 2.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) ) ) [2022] => Array ( [12] => Array ( [0] => Array ( [id] => 11 [billdtimes] => 1669859617 [month] => 12 [price] => 6.00 [years] => 2022 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1669859617 [billEndtime] => 1672365217 ) ) ) )

select代码数据

Array ( [0] => Array ( [id] => 28 [billdtimes] => 1672502400 [month] => 1 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) [1] => Array ( [id] => 31 [billdtimes] => 1672502400 [month] => 1 [price] => 3.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1672502400 [billEndtime] => 1675094400 ) [2] => Array ( [id] => 29 [billdtimes] => 1675180800 [month] => 2 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1675180800 [billEndtime] => 1677513600 ) [3] => Array ( [id] => 30 [billdtimes] => 1677600000 [month] => 3 [price] => 8.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1677600000 [billEndtime] => 1680192000 ) [4] => Array ( [id] => 6 [billdtimes] => 1680313031 [month] => 4 [price] => 6.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [5] => Array ( [id] => 7 [billdtimes] => 1680313031 [month] => 4 [price] => 1.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [6] => Array ( [id] => 8 [billdtimes] => 1680313031 [month] => 4 [price] => 2.00 [years] => 2023 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 0 [billEndtime] => 0 ) [7] => Array ( [id] => 11 [billdtimes] => 1669859617 [month] => 12 [price] => 6.00 [years] => 2022 [wuyeId] => 1 [communityId] => 3 [unitNumber] => 2 [buildingId] => 1 [roomNumber] => 302 [billStartime] => 1669859617 [billEndtime] => 1672365217 ) )


实现代码:

如何将二维数组按年月分组生成新的数组结构?

sonlist 查询的元数据 使用&引用方法实现

// 创建基于主键的数组引用 $refer = array(); foreach ($sonlist as $key => $data) { $refer[$data["years"]][$data["month"]][] = &$sonlist[$key]; }



public function getFormatMenus($map = [], $field = '*') { $list = $this->field($field)->where($map)->select()->order('sort asc')->toArray(); return $list ? $list : []; } public function listToTree(array $list) { $tree = array(); $pk = 'id'; $pid = 'pid'; $root = 0; $child = 'children'; if (is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] = &$list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] = &$list[$key]; } else { if (isset($refer[$parentId])) { $parent = &$refer[$parentId]; $parent['childs'][] = $data['id']; $parent[$child][] = &$list[$key]; } } } } return $tree; }