Php 递归动态数组

Php 递归动态数组,php,arrays,dynamic,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(da

我有一个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;
}
函数分布($u、$h、$d、$m、$y、$arr、$u\u h=8)
{
$remain=($h%$u_h);$h=$h-$remain;$total_days=($h/$u_h);
如果($total_days>0)
对于($i=0;$i 0)
$arr[date('m-Y',mktime(0,0,0,$m,$d+$i,$Y))][$u]+=$remain;
返回$arr;
}

它有效,但速度相当慢。

6个问题,0个被接受。不好是的,我有办法做到这一点。好的答案当然是“有奖的”,但一定是好的答案。6个循环中只有2个是好的答案,它们现在被正确地接受了,我的错。@Talisin,我已经尝试通过数组循环并填充一个新的,尝试(重新)将相同的数组填充到foreach循环中(但是在循环中添加一个项会导致指针被扩展),尝试使用迭代器来操作数组实际的主函数是
Distribute($u,$h,$d,$m,$y,$arr,$u h=8){$resident=($h%$u_h);$h=$h-$resident;$total_udays=($h/$u_h);if($total_udays>0)for($i=0;$i0)$arr[date($m-y',mktime(0,0,0,0,0,$m,$d+$i,$y))][$resident;$resident;$resident;return$arr;
它工作得很慢。@mellamokb?