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_post_id”的“my_status”和“my_rating”的值。

最后,我想要以下数组:

 $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 );

任何帮助将非常感激。

丹尼尔

4

2 回答 2

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
        )

)
于 2012-10-01T16:38:47.357 回答
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'];
    }
}
于 2012-10-01T16:40:13.213 回答