【问题标题】:Create blocks of times from multidimensional array从多维数组创建时间块
【发布时间】:2011-06-03 15:42:14
【问题描述】:

我正在开发一个调度系统,我需要获取我已完成的所有连续 4 次或更多时间:

大批 ( [0] => 数组 ( [0] => 18:00:00 [1] => 19:00:00 [2] => 20:00:00 [3] => 21:00:00 [4] => 22:00:00 ) [1] => 数组 ( [0] => 09:00:00 [1] => 10:00:00 [2] => 11:00:00 [3] => 12:00:00 [4] => 13:00:00 [5] => 14:00:00 [6] => 15:00:00 [7] => 16:00:00 ) )

我如何将这个多维数组放入四个潜在的时间块中作为复选框?

例如:

复选框 1 = 18:00:00 - 21:00:00

复选框 2 = 19:00:00 - 22:00:00

复选框 3 = 09:00:00 - 12:00:00

复选框 4 = 10:00:00 - 13:00:00

等等……

任何帮助都将不胜感激,因为这已经让我绞尽脑汁好几个小时了。

提前感谢您的帮助。

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    试试这个:

    $a = array(
        array("18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00"),
        array("09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00")
    );
    foreach ($a as $group)
    {
        for ($i = 3; $i < count($group); ++$i)
        {
            print $group[$i-3] . " - " . $group[$i] . "<br />"; 
        }
    }
    

    输出:

    18:00:00 - 21:00:00
    19:00:00 - 22:00:00
    09:00:00 - 12:00:00
    10:00:00 - 13:00:00
    11:00:00 - 14:00:00
    12:00:00 - 15:00:00
    13:00:00 - 16:00:00
    

    【讨论】:

    • 这些很棒。非常感谢大家的帮助。
    【解决方案2】:

    嗯,我看到的方式是您希望将子数组堆叠成一个大数组,然后将它们分成四个部分,从中选择要在网页上显示的最小值和最大值?我会这样做的方式如下:

    1. 获取所有子数组值并将它们放入一个大数组中
    2. 对大数组进行排序
    3. 将大数组分成四段
    4. 遍历拆分后的数组并获取最小值和最大值
    5. 在您的页面上显示这些内容。

    这就是代码的样子:

    // Setting: Amount of checkboxes
    $div = 4;
    
    $a = array(
        array("18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00"),
        array("09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00")
    );
    
    $a_tot = array_unique(array_merge($a[0], $a[1]));
    $count = count($a_tot);
    $num_per = ceil($count / $div);
    
    sort($a_tot);
    $a_new = array();
    $i = 0;
    while (!empty($a_tot[$i])) {
    
        $a_new[] = array_slice($a_tot, $i, $num_per);
        $i += $num_per;
    
    }
    
    $chk_opt = array();
    for ($i=0; $i<$div; $i++) {
    
        $chk_opt[] = sprintf("%s - %s", min($a_new[$i]), max($a_new[$i]));
    
    }
    
    unset ($a_tot, $count, $num_per, $a_new);
    

    输出:

    array(4) {
        [0]=> string(19) "09:00:00 - 12:00:00"
        [1]=> string(19) "13:00:00 - 16:00:00"
        [2]=> string(19) "18:00:00 - 21:00:00"
        [3]=> string(19) "22:00:00 - 22:00:00"
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 1970-01-01
      • 2014-12-10
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多