php - 如何在PHP中分别求和二维数组的值

标签 php arrays for-loop multidimensional-array count

问题陈述:将二维数组的值求和,单独保存。

JSON 字符串:

{
    "user_name": "USER1",
    "selected_date": "07/27/2015",
    "selected_project": "PROJECT1",
    "tasks": [{
        "task_name": " Task-1",
        "work_hours": [{
            "Monday": " 2"
        },
        {
            "Tuesday": " 1"
        },
        {
            "Wednesday": " 4"
        },
        {
            "Thursday": " 0"
        },
        {
            "Friday": " 0"
        },
        {
            "Saturday": " 0"
        },
        {
            "Sunday": " 0"
        }]
    },
    {
        "task_name": " Task-2",
        "work_hours": [{
            "Monday": " 5"
        },
        {
            "Tuesday": " 1"
        },
        {
            "Wednesday": " 5"
        },
        {
            "Thursday": " 0"
        },
        {
            "Friday": " 0"
        },
        {
            "Saturday": " 0"
        },
        {
            "Sunday": " 0"
        }]
    }]
}

代码

.....
$str_json = file_get_contents('php://input');
$response = json_decode($str_json, true); // decoding received JSON to array
decoded = json_decode($response, true);
$task_counter = count($decoded['tasks']);
$hour_counter = count($decoded['tasks'][0]['work_hours']);
$_tasks = array();
$_hours = array();
$_hours[] = array();

按要求提取工时:

for ( $var1 = 0; $var1 <= $task_counter; $var1++)
{
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][0]['Monday'];
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][1]['Tuesday'];
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][2]['Wednesday'];
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][3]['Thursday'];
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][4]['Friday'];
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][5]['Saturday'];
  $_hours[$var1][] = $decoded['tasks'][$var1]['work_hours'][6]['Sunday'];
}

for($var = 0; $var <= $task_counter; $var++)
{
    echo "|";
    for ($var1 = 0; $var1 <= 7; $var1++) 
  {
     echo $_hours[$var][$var1];
  }
}

$_totalArray = array();
for ( $i=0 ; $i<=7; $i++)
{
    foreach($_hours as $num => $values) 
    {
      
       $_totalArray[$i] += $values[$i];
  }
 }
echo "<br>Task-1:$_totalArray[0]";
echo "Task-2:$_totalArray[1]";


....

预期结果:特定任务的工时总和。

示例:

Task-1: 7

Task-2: 11

不幸的是我的逻辑在某处出错了。 帮助将不胜感激。

最佳答案

这可以更简单地完成:

$decoded = json_decode($str_json, true); // decoding received JSON to array

foreach ($decoded['tasks'] as $task) {
    $total = 0;
    foreach ($task['work_hours'] as $day) {
        foreach ($day as $key=>$value) {
            $total += $value;
        }
    }
    echo $task['task_name'] .': ' . $total .'<br/>';
}

输出

Task-1: 7
Task-2: 11

关于php - 如何在PHP中分别求和二维数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31166941/

相关文章:

python - 有什么办法可以让 python 中的 "for"循环在每次迭代后使我的索引值加倍?

php - 根据 SLA 计算系统可用性

javascript - 将变量从 .html 传递到 .php 那太大而不适合 URL?

c++添加操作菜单

javascript - 从 JavaScript 中提取数组数据

swift - 使用循环填充多维数组

javascript - 更改 for 循环以在 javascript 中使用 forEach

php str_getcsv 数组问题

javascript - 这个javascript和php代码有什么问题吗?

javascript - 如何在 'N/search'模块过滤器中添加带括号的过滤条件