递归动态数组

时间:2011-10-07 02:44:13

标签: php arrays dynamic

我有这个php数组场景:

array(2) {
  [43]=>
  array(2) {
    ["2011-07-01"]=>
    int(20)
    ["2011-07-02"]=>
    int(16)
  }
  [77]=>
  array(2) {
    ["2011-07-01"]=>
    int(10)
    ["2011-07-02"]=>
    int(10)
  }
}

而数组($ person => array(date => hour))。 我需要在随后的几天内分发8小时,因此输出结果为:

array(2) {
  ["anna"]=>
  array(5) {
    ["2011-07-01"]=>
    int(8)
    ["2011-07-02"]=>
    int(8)
    ["2011-07-03"]=>
    int(8)
    ["2011-07-04"]=>
    int(8)
    ["2011-07-05"]=>
    int(4)
  }
  ["joan"]=>
  array(3) {
    ["2011-07-01"]=>
    int(8)
    ["2011-07-02"]=>
    int(8)
    ["2011-07-03"]=>
    int(4)
  }
}

关于如何做到这一点的任何想法?这里只是一个片段,生产数组非常大,平均50个人密钥和几十个日期密钥,我们在这里的主要功能需要2-3分钟才能完成。

顺便说一下,在这里发帖我已经筋疲力尽了搜索和编码。

谢谢你!


来自作者的评论如下:

我尝试通过数组循环填充一个新的,尝试(重新)将相同的数组填充到foreach循环中(但是在循环中添加一个项目确实会导致指针被扩展),尝试使用迭代器来操作数组实际的主要功能是:

function Distribute($u,$h,$d,$m,$y,$arr,$u_h=8)
{
    $remain = ($h % $u_h);$h = $h-$remain; $total_days = ($h/$u_h); 
    if ($total_days > 0)
      for ($i=0; $i<$total_days ; $i++) 
          $arr[date('m-Y',mktime(0,0,0,$m,$d+$i,$y))][$u] += $u_h; 
    if ($remain > 0) 
       $arr[date('m-Y',mktime(0,0,0,$m,$d+$i,$y))][$u] += $remain;
    return $arr;
}

它有效,但速度很慢。

0 个答案:

没有答案