我有2个数组如下所示。
我需要获得与其相关的每个里程碑的进度总和(在任务数组中)。
所以在tasks数组中,我可以看到1578453e53090b(线框里程碑)的进度总和为15。
理想的结果是将进度总和附加到每个里程碑。希望这是有道理的。
$milestones =
Array
(
[0] => Array
(
[id] => 1578453e53090b
[milestone] => Wireframe
[assigned_to] => 9
)
[1] => Array
(
[id] => 1578453e530975
[milestone] => Development
)
[2] => Array
(
[id] => 1578453e530943
[milestone] => Design
[assigned_to] => 2
)
)
$tasks =
Array
(
[0] => Array
(
[id] => 15786dc59333f2
[status] => Open
[progress] => 5
[milestone] => 1578453e53090b
)
[1] => Array
(
[id] => 15786dc669d451
[status] => Open
[progress] => 10
[milestone] => 1578453e53090b
)
[2] => Array
(
[id] => 15786dc7ccbea3
[status] => Open
[progress] => 20
[milestone] => 1578453e530943
)
)
答案 0 :(得分:2)
数组映射应该可以解决问题:
//will add 'progress' key to each milestone
$tabulate_progress = function($milestone) use ($tasks) {
$milestone['progress'] = 0; //start with 0 progress
foreach($tasks as $task):
//add to progress if we find a matching task
if($task['milestone']===$milestone['id'])
$milestone['progress']+=$task['progress'];
endforeach;
return $milestone;
};
$milestones = array_map($tabulate_progress,$milestones);
答案 1 :(得分:1)
其中一种方法是使用foreach
。使用foreach
的第一个milestones
获取与foreach
中tasks
的第二个milestone
匹配的ID。
之后,使用简单的$total
容器继续使用,并使用简单的if
进行调整。
foreach($milestones as &$m) {
// ^ add reference to make changes
$total = 0; // initialize total holder
foreach($tasks as $task) {
if($task['milestone'] === $m['id']) { // if it matches
$total += $task['progress']; // add
}
}
$m['total'] = $total; // after its done, add another key pair being total and its value
}