2016-05-03 13 views
0

我有一个包含数组对象数组的多维结果,需要将此结果合并到单个数组中,其唯一值为content,总和为total。如下所示的结果。帮助肯定是赞赏的。相同的内容值需要在多维数组中求和 - 使用PHP

结果集

Array 
(
    [0] => Array 
     (
      [response_id] => 23598 
      [choice_question_detail] => Array 
       (
        [0] => Array 
         (
          [content] => How old are your. 
          [total] => 5 
         ) 

        [1] => Array 
         (
          [content] => Stadium. 
          [total] => 4 
         ) 
     ), 
     [1] => Array 
     (
      [response_id] => 23599 
      [choice_question_detail] => Array 
       (
        [0] => Array 
         (
          [content] => How old are your. 
          [total] => 2 
         ) 

        [1] => Array 
         (
          [content] => Stadium. 
          [total] => 1 
         ) 
     )  
) 

所需的结果

Array 
(
    [0] => Array 
     (
      [content] => How old are your. 
      [total] => 7 
     ) 

    [1] => Array 
     (
      [content] => Stadium. 
      [total] => 5 
     ) 
) 

我目前的执行试图做这样的事情:

$sum = array_reduce($data, function ($a, $b) { 
    isset($a[$b['choice_question_detail']]) ? $a[$b['choice_question_detail']]['total'] += $b['total'] : $a[$b['total']] = $b; 
return $a; 
}); 

回答

1

循环是这样的...有点讨厌,但它应该工作。

当然还有很多优化的空间,这取决于你如何改进它。

$out = array(); 

    foreach($var as $row) { 
     foreach($row['choice_question_detail'] as $detail) { 
      $flag = false; 
      $numkey = -1; 
      foreach($out as $key => $x) { 
       if($x['content'] == $detail['content']) { 
        $flag = true; 
        $numkey = $key; 
       } 
      } 
      if(!$flag) { 
       $out[] = array(
        'content' => $detail['content'], 
        'total' => $detail['total']   
       ); 
      } else { 
       $out[$numkey]['total'] = $out[$numkey]['total'] + $detail['total']; 
      } 
     } 
    } 

输出是这样

array (size=2) 
    0 => array (size=2) 
      'content' => string 'How old are your.' (length=17) 
      'total' => int 7 
    1 => array (size=2) 
     'content' => string 'What is your name.' (length=18) 
     'total' => int 5 
0

有做无本机方法THI s,自己写。

$merged = array(); 
foreach($responses["choice_question_detail"] as $question){ 
    if($merged_q=$merged[$question["content"]]){ 
     $merged_q["total"] += $question["total"]; 
    }else{ 
     $merged[$question["content"]] = $qeustion; 
    } 
} 
$desired = array_values($merged);