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 に答える