首页 > 解决方案 > 使用数组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-27to 2019-05-31is 1020 - 1000 = 20 / 1 = 20and from 2019-06-02to 2019-06-08is1060 - 1030 = 30 / 2 = 15和 from 2019-06-10to 2019-06-12is 1080 - 1070 = 10 / 1 = 10,我将添加所有内容。我将如何将它们正确分组

标签: php

解决方案


<?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>");

?>

推荐阅读