2016-06-07 49 views
0

您好我有结构数组等作为求和阵列钥匙

array:2 [ 
    0 => array:3 [ 
    "title" => "samba" 
    "diff" => "06:30:00" 
    "user" => "Janek" 
    ] 
    1 => array:3 [ 
    "title" => "Ramba" 
    "diff" => "03:30:00" 
    "user" => "Janek" 
    ] 
    2 => array:3 [ 
    "title" => "fit" 
    "diff" => "03:30:00" 
    "user" => "Pawel" 
    ] 
] 

输出应该

array:2 [ 
    0 => array:3 [ 
    "title" => "samba" 
    "sum" => "10" 
    "user" => "Janek" 
    ] 
    1 => array:3 [ 
    "title" => "Ramba" 
    "sum" => "03:30:00" 
    "user" => "Pawel" 
    ] 

] 

我需要总结的所有差异密钥,但对于用户。 e.g用户=> janek总和DIFF => 10 用户=>的Pawel总和DIFF => 3:30

我试图

$values=array_sum(array_column($newArray,'diff)) 

但这总和所有数组。 我希望你明白。

+2

尝试http://stackoverflow.com/questions/1496682/how-to-sum-values-of-the-array-of-the-same-key –

+0

我已经给了你一个答案根据您的修改...检查它...但它需要修改 –

回答

0

综上所述小时对于分组的用户使用与DateTime::add()preg_replacearray_values功能的以下方针:

// supposing $arr is your initial array 
$result = []; 
foreach ($arr as $el) { 
    if (!isset($result[$el['user']])) { 
     $result[$el['user']] = $el; 
    } else { 
     $interval = new \DateInterval(preg_replace("/^(\d{2}):(\d{2}):\d{2}$/", 'PT$1H$2M', $el['diff'])); 
     $result[$el['user']]["diff"] = (new \DateTime($result[$el['user']]["diff"]))->add($interval)->format('H:i:s'); 
    } 
} 
foreach ($result as &$v) { // renaming keys 'diff'/'sum' 
    $v["sum"] = $v["diff"]; 
    unset($v["diff"]); 
} 
print_r(array_values($result)); 

输出:

Array 
(
    [0] => Array 
     (
      [title] => samba 
      [user] => Janek 
      [sum] => 10:00:00 
     ) 

    [1] => Array 
     (
      [title] => fit 
      [user] => Pawel 
      [sum] => 03:30:00 
     ) 
) 
0

我得到了你的答案。那么这里是代码的混乱,但我认为你可以在自己的管理休息...任何编辑建议,也欢迎在这里...

<?php 
$sumArray = array(); 
$myArray = array(
    0 => array(
    "title" => "samba", 
    "diff" => "06:30:00", 
    "user" => "Janek" 
), 
    1 => array(
    "title" => "Ramba", 
    "diff" => "03:30:00", 
    "user" => "Janek", 
), 
    2 => array(
    "title" => "fit", 
    "diff" => "03:30:00", 
    "user" => "Pawel" 
) 
); 
$i = 0; 
$xarray = array(); 
foreach ($myArray as $k=>$subArray) 
{ 
    $parts = explode(':', $subArray["diff"]); 
    $seconds = ($parts[0] * 60 * 60) + ($parts[1] * 60) + $parts[2];  
    if(in_array($subArray["user"],$xarray)):   
      $key = myfunction($sumArray,"user",$subArray["user"]); 
      $sumArray[$key]["sum"] = gmdate("H:i:s", $sumArray[$key]["sum1"]+$seconds); 
    else:  
     $sumArray[$i] = $subArray; 
     $sumArray[$i]["sum1"] = $seconds; 
     $sumArray[$i]["sum"] = gmdate("H:i:s",$seconds); 
     $xarray[] = $subArray["user"]; 
     $i++; 
    endif;  
} 
foreach($sumArray as $key=>$value) 
{ 
    unset($sumArray[$key]["diff"]); 
    unset($sumArray[$key]["sum1"]); 
} 
function myfunction($arrays, $field, $value) 
{ 
    foreach($arrays as $key => $product) 
    { 
     if ($product[$field] === $value) 
     return $key; 
    } 
} 
echo "<pre>"; 
print_r($sumArray); 
echo "</pre>"; 

输出: -

Array 
(
    [0] => Array 
     (
      [title] => samba 
      [user] => Janek 
      [sum] => 10:00:00 
     ) 

    [1] => Array 
     (
      [title] => fit 
      [user] => Pawel 
      [sum] => 03:30:00 
     ) 

)