我有这个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;
}
它有效,但速度很慢。