0

私はこのような配列を持っています

Array ( 

[0] => Array
        (
            [id] => 123
            [count] => 1
        )

    [1] => Array
        (
            [id] => 123
            [count] => 3
        )

    [2] => Array
        (
            [id] => 513
            [count] => 0
        )
    [3] => Array
        (
             [id] => 561
             [count] => 1
         )
     [4] => Array
         (
              [id] => 613
              [count] => 7
         )

)

私がやりたいのは、id値が同じであるカウントを合計する新しい配列を作成することです。したがって、たとえば、新しい配列は次のようになります。

Array ( 

[0] => Array
        (
            [id] => 123
            [count] => 4
        )

    [1] => Array
        (
            [id] => 513
            [count] => 0
        )
    [2] => Array
        (
             [id] => 561
             [count] => 1
         )
     [3] => Array
         (
              [id] => 613
              [count] => 7
         )

)

誰かがこれを行うための良い方法を知っていますか?

ありがとうございました!

4

3 に答える 3

0

の連想配列を作成していない理由id => count

于 2012-07-24T20:45:11.410 に答える
0

次の関数でそれを行うことができます(私はコードをテストしていませんが、動作するはずです):

function get_count_array($arr) {
    $new_array = array(); 

    foreach($arr as $item) {
        $found = false;

        //loop through all the current new items to check if we already have it
        for($i = 0; $i < count($new_array); $i++) {
            //do we have it?
            if($new_array[$i]['id'] == $item['id']) { 
                $new_array[$i]['count'] += 1;
                $found = true;

                break;
            }
        }

        if(!$found) {
            $new_array[] = array('id' => $item['id'], 'count' => 0);
        }
    }

    return $new_array;
}
于 2012-07-24T20:45:59.753 に答える
0

短くてシンプル:

$new_array = array();

foreach($data_array as $value) {
    if(array_key_exists($value['id'], $new_array)) {
        $new_array[$value['id']] += $value['count'];
    } else {
        $new_array[$value['id']] = $value['count'];
    }
}

echo print_r($new_array,true);

配列のキーとして使用できるid => value場合、データ用に別の配列は必要ないようだったので、作成しました。id

于 2012-07-24T20:51:44.857 に答える