2012-10-01 117 views
0

我是一名PHP初学者,整天都在寻找解决方案,但没有成功。如何结合多维数组中的数组和计数值?

我有以下的数组:

$data = Array 
(
[0] => Array 
    (
     [my_id] => 1 
     [my_post_id] => 123 
     [my_status] => 1 
     [my_rating] => 5 
    ) 

[1] => Array 
    (
     [my_id] => 2 
     [my_post_id] => 123 
     [my_status] => 1 
     [my_rating] => 4 
    ) 

[2] => Array 
    (
     [my_id] => 3 
     [my_post_id] => 123 
     [my_status] => 1 
     [my_rating] => 5 
    ) 

[3] => Array 
    (
     [my_id] => 4 
     [my_post_id] => 456 
     [my_status] => 1 
     [my_rating] => 5 
    ) 

[4] => Array 
    (
     [my_id] => 5 
     [my_post_id] => 456 
     [my_status] => 1 
     [my_rating] => 3 
    ) 
) 

,想用相同的“my_post_id”合并数组和计数“my_status”和“my_rating”,其具有相同的“my_post_id”的值。

最后,我想有以下数组:

$data = Array 
(
[0] => Array 
    (
     [my_post_id] => 123 
     [my_status] => 3 
     [my_rating] => 14 
    ) 

[1] => Array 
    (
     [my_post_id] => 456 
     [my_status] => 2 
     [my_rating] => 8 
    ) 
) 

我能得到独特的“my_post_id”阵列,下面的代码,但我无法找出如何计算其他值。

$out = array(); 
    foreach($data as $row) { 
     $out[$row['my_post_id']] = $row; 
    } 
    $array = array_values($out); 

任何帮助将不胜感激。

丹尼尔

+0

我我确信你可以用'if(i sset($ out [$ row ['my_post_id']])){...}' –

+0

仍然不明白你的'merge'是如何工作的... – Baba

+0

看看MiDo和我的帖子在下面。两者都向您展示增加(总和)值的方法。唯一真正的区别是他将post_id作为关键字段,而我的增量则像你所要求的那样不相关。我认为如果你重新考虑你的要求,他对你的最终结果更有意义。 – Dave

回答

1

这将产生你所寻找的数组:在

$out = array(); 
foreach($data as $row) { 
    if (!isset($out[$row['my_post_id']])) { 
     $out[$row['my_post_id']] = Array("my_id"=>$row['my_id'], 
              "my_status" => $row["my_status"], 
              "my_rating" => $row["my_rating"]); 
    } 
    else { 
     $out[$row['my_post_id']]["my_status"] += $row["my_status"]; 
     $out[$row['my_post_id']]["my_rating"] += $row["my_rating"]; 
    } 

} 

结果:

Array 
(
    [123] => Array 
     (
      [my_id] => 1 
      [my_status] => 3 
      [my_rating] => 14 
     ) 

    [456] => Array 
     (
      [my_id] => 4 
      [my_status] => 2 
      [my_rating] => 8 
     ) 

) 
+0

哇,这很快:-)非常感谢您的帮助。非常感谢,它完美运作。 –

1

尝试以下方法 - 未经测试的代码

foreach($data as $key => $val){ 
    if(!array_search($val['my_post_id'],$newArray)){ 
     $newArray[]=array('my_post_id' => $val['my_post_id'], 
          'my_status' => $val['my_status'], 
          'my_rating' => $val['my_rating']); 
    }else{ 
     $myIndex=array_search($val['my_post_id'],$newArray); 
     $newArray[$myIndex]['my_status']+=$val['my_status']; 
     $newArray[$myIndex]['my_rating']+=$val['my_rating']; 
    } 
} 
+0

非常感谢您的帮助。 –