【问题标题】:creating multidimensional array with index based on row value基于行值创建具有索引的多维数组
【发布时间】:2017-08-01 18:20:21
【问题描述】:

我的 mysql 数据库中有下表,其中包含开始和结束 TIME 数据类型的事件:

start_time  end_time    day 
08:00:00    16:00:00    1
08:00:00    16:00:00    1
08:00:00    16:00:00    4
08:00:00    16:00:00    5

我想用这个创建一个多维数组,其中每天都有它的 start_time 和 end_time 在一个数组中,像这样;

array:3 [
    1 => array:2 [
        0 => array:2 [
            0 => "08:00"
            1 => "16:00"
        ]
        1 => array:2 [
            0 => "08:00"
            1 => "16:00"
        ]
    ]
    4 => array:1 [
        0 => array:2 [
            0 => "08:00"
            1 => "16:00"
        ]
    ]
    5 => array:1 [
        0 => array:2 [
            0 => "08:00"
            1 => "16:00"
        ]
    ]
]

我有一个变量,其中包含我可以 foreach 经历的所有事件。

这是可行的还是我需要使用数据透视表来保持这两个值分开?

谢谢!

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    遍历您获取的行并使用day 作为键并动态添加元素[] 并将时间分配为数组:

    foreach($rows as $row) {
        $result[$row['day']][] = array($row['start_time'],
                                       $row['end_time']);
    }
    

    或者从数据库中获取时这样做:

    while($row = /* fetch_function() */) {
        $result[$row['day']][] = array($row['start_time'],
                                       $row['end_time']);
    }
    

    【讨论】:

      【解决方案2】:
      <?php
       $records = array(
          array(
              'start_time' => '00:11:22',
              'end_time'   => '11:22:33',
              'day' => 1
          ),
          array(
              'start_time' => '20:11:22',
              'end_time'   => '21:22:33',
              'day' => 2
          ),
          array(
              'start_time' => '10:11:22',
              'end_time'   => '11:22:33',
              'day' => 1
          )
      
      ); // Your actual data would replace this of course
      
       $sorted = array();
       foreach($records as $record){
           // Group by day
           $sorted[$record['day']][] = $record;
       }
      
      
       // Group again
       $results = array();
       foreach($sorted as $day => $records){
           foreach($records as $record){
              $results[$day][] = 
              array($record['start_time'],$record['end_time']);   
           }
      
       }
      
       var_dump($results);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        • 1970-01-01
        相关资源
        最近更新 更多