php - 使用数组PHP划分表数据的正确方法
问题描述
我有这个表数据:
Date | Room | Reading | Pax
2019-05-27 | B-1 | 1000 | 1
2019-05-29 | B-1 | 1010 | 1
2019-05-31 | B-1 | 1020 | 1
2019-06-02 | B-1 | 1030 | 2
2019-06-04 | B-1 | 1040 | 2
2019-06-06 | B-1 | 1050 | 2
2019-06-08 | B-1 | 1060 | 2
2019-06-10 | B-1 | 1070 | 1
2019-06-12 | B-1 | 1080 | 1
我想做的是将它们分组如下:
$my_array();
foreach ($results as $result) {
//group them up by room first, then by pax, then by dates
$my_array[$result->room][$result->pax][$result->date] = array('reading'=>$result->reading);
}
我期望的是:
Array
(
[B-1] => Array
(
[1] => Array
(
[2019-05-27] => Array
(
[reading] => 1000
)
[2019-05-29] => Array
(
[reading] => 1010
)
[2019-05-31] => Array
(
[reading] => 1020
)
)
[2] => Array
(
[2019-06-02] => Array
(
[reading] => 1030
)
[2019-06-04] => Array
(
[reading] => 1040
)
[2019-06-06] => Array
(
[reading] => 1050
)
[2019-06-08] => Array
(
[reading] => 1060
)
)
[1] => Array
(
[2019-06-10] => Array
(
[reading] => 1070
)
[2019-06-12] => Array
(
[reading] => 1080
)
[2019-05-31] => Array
(
[reading] => 1020
)
)
)
)
但是具有相同房间和相同人数的所有数据都在一起,我想通过我期望的输出将它们分开,因为我将根据人数和之间的日期计算读数的数量,所以 from 2019-05-27
to 2019-05-31
is 1020 - 1000 = 20 / 1 = 20
and from 2019-06-02
to 2019-06-08
is1060 - 1030 = 30 / 2 = 15
和 from 2019-06-10
to 2019-06-12
is 1080 - 1070 = 10 / 1 = 10
,我将添加所有内容。我将如何将它们正确分组
解决方案
<?php
// init data
$results = array(
array("date"=>"2019-05-27","room"=>"B-1","reading"=>1000,"pax"=>"1"),
array("date"=>"2019-05-29","room"=>"B-1","reading"=>1010,"pax"=>"1"),
array("date"=>"2019-05-31","room"=>"B-1","reading"=>1020,"pax"=>"1"),
array("date"=>"2019-06-02","room"=>"B-1","reading"=>1030,"pax"=>"2"),
array("date"=>"2019-06-04","room"=>"B-1","reading"=>1040,"pax"=>"2"),
array("date"=>"2019-06-06","room"=>"B-1","reading"=>1050,"pax"=>"2"),
array("date"=>"2019-06-08","room"=>"B-1","reading"=>1060,"pax"=>"2"),
array("date"=>"2019-06-10","room"=>"B-1","reading"=>1070,"pax"=>"1"),
array("date"=>"2019-06-12","room"=>"B-1","reading"=>1080,"pax"=>"1"),
);
$my_array = array();
$pax_current = 0;
$no = 0;
foreach ($results as $result) {
// increment N-array when pax change
if ($pax_current != $result['pax']) {$no++; $pax_current=$result['pax'];}
//group them up by room first, then by change pax, then by dates
$my_array[$result['room']][$no][$result['date']] = array('reading'=>$result['reading'],'pax'=>$result['pax']);
}
//Output
print("<pre>");
print_r($my_array);
print("</pre>");
?>
推荐阅读
- rest - 如何在不实际执行的情况下对 HTTP DELETE 操作的后果进行建模
- android - CoordinatorLayout + FrameLayout + ViewPager + RecyclerView
- apache-camel - 如何在骆驼的属性文件sql查询中传递标头值
- c# - Parallel.ForEach 中的异常日志
- node.js - 使用 V8 引擎调试 js 字节码
- javascript - 在 ComponentDidMount 中停止和启动 setInterval
- automation - EtherCAT 从站可以有静态地址吗?
- python - 为什么我的 python 代码的时间复杂度为 O(N**2)
- google-cloud-platform - 数据存储从 Dataflow 写入相同的实体组
- python - Python仅排除另一个csv文件中存在的csv文件中的行