2015-07-01 30 views
3

问题陈述:总结二维数组的值并将其单独保存。如何在PHP中单独总结二维数组的值

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]"; 


.... 

预期结果:工作时间particu的总和较低的任务。

任务-1:7

任务-2:11

不幸的是我的逻辑去错地方。 帮助,将不胜感激。

回答

3

这是可以做到更简单:

$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/>'; 
} 

输出

任务-1:7
任务2:11

+0

非常感谢,它w非常好。 – WEshruth

0

这是我的解决方案(下面的一些注意事项):

$data = json_decode(
    file_get_contents('test.json'), 
    TRUE 
); 

//die(print_r($json)); 

$tasks = Array(); 

$work_days = Array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'); 

foreach($data['tasks'] as $task) { 

    //set starting hours at 0 
    $tasks[$task['task_name']] = 0; 

    foreach($task['work_hours'] as $hours) { 
     foreach($work_days as $day) { 
      if(isset($hours[$day])) { 
       $tasks[$task['task_name']] += (int) $hours[$day]; 
      } 
     } 
    } 

} 

print_r($tasks); 

首先你要的print_r()解码JSON - 然后查看源代码,你会得到的阵列是如何的美景包括:

enter image description here

2

这里是我的2美分(我 PHP的阵列功能!):

$response = json_decode($str_json, true); 

foreach($response['tasks'] as $task) 
{ 
    $workHours = []; 

    // flatten the $task['work_hours'] array 
    // this basically puts all the working hours in one array 
    array_walk_recursive($task['work_hours'], function ($x) use (&$workHours) { $workHours[] = $x; }); 

    echo $task['task_name'] . ": " . array_sum($workHours); 
} 
+0

这是一个非常整洁的解决方案,感谢分享。 – mittmemo

1

试试这个...

$jsonObj = json_decode(
    file_get_contents('test.json'), 
    TRUE 
);  

$count = array(); 

foreach($jsonObj['tasks'] as $task) { 
    $count[i] = 0; 
    $count[i] += $count[i] + (int)$task['work_hours']['Monday']; 
    $count[i] += $count[i] + (int)$task['work_hours']['Tuesday']; 
    $count[i] += $count[i] + (int)$task['work_hours']['Wednesday']; 
    $count[i] += $count[i] + (int)$task['work_hours']['Thursday']; 
    $count[i] += $count[i] + (int)$task['work_hours']['Friday']; 
    $count[i] += $count[i] + (int)$task['work_hours']['Saturday']; 
    $count[i] += $count[i] + (int)$task['work_hours']['Sunday']; 
} 

echo "Task 1 = " . $count['0'] . "\n" ."Task 2 = " . $count['1'];