按属性名称求和数组值

我想用相同的代码对计数值求和。


这是我的数组:


$data = array(

    array(

        'code' => 02,

        'count' => 8

    ),

    array(

        'code' => 03,

        'count' => 1

    ),

    array(

        'code' => 03,

        'count' => 1

    ),

    array(

        'code' => 03,

        'count' => 7

    ),

    array(

        'code' => 11,

        'count' => 1

    ),

    array(

        'code' => 11,

        'count' => 5

    ),

    array(

        'code' => 17,

        'count' => 4

    ),

    array(

        'code' => 17,

        'count' => 2

    ),

    array(

        'code' => 17,

        'count' => 8

    )

);

现在我尝试对数组进行分组以count使用相同的代码求和,但我认为我错了:


$new_data = [];    

foreach($data as $k => $v){

    $total = 0;

    $new_data[$v['code']] = array(

        'ttl' => $v['count'] + $total,

    );

}

echo '<pre>';

print_r($new_data);

echo '</pre>';

正确的代码是什么?谢谢。


POPMUISE
浏览 103回答 3
3回答

RISEBY

使用isset将避免未定义的偏移错误:$new_data = [];foreach($data as $k => $v){&nbsp; &nbsp; if (!isset($new_data[$v['code']]['ttl'])){&nbsp; &nbsp; &nbsp; &nbsp; $new_data[$v['code']]['ttl'] = 0;&nbsp; &nbsp; }&nbsp; &nbsp; $new_data[$v['code']]['ttl'] += $v['count'];}print_r($new_data);

慕尼黑5688855

假设您希望 to 中的键$new_data是唯一的代码,并且值是一个数组,ttl其键的值是该特定代码的计数总和:$new_data = [];&nbsp; &nbsp;&nbsp;foreach($data as $v){&nbsp; &nbsp; if (!array_key_exists($v['code'], $new_data)) {&nbsp; &nbsp; &nbsp; &nbsp; $new_data[$v['code']]['ttl'] = $v['count'];&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; $new_data[$v['code']]['ttl'] += $v['count'];&nbsp; &nbsp; }}

不负相思意

我认为这就是您想要的输出:Array(&nbsp; &nbsp; [2] => Array&nbsp; &nbsp; &nbsp; &nbsp; (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ttl] => 8&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; [3] => Array&nbsp; &nbsp; &nbsp; &nbsp; (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ttl] => 9&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; [11] => Array&nbsp; &nbsp; &nbsp; &nbsp; (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ttl] => 6&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; [17] => Array&nbsp; &nbsp; &nbsp; &nbsp; (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ttl] => 14&nbsp; &nbsp; &nbsp; &nbsp; ))如果是这样,您可以对代码进行少量修改,如下所示:$new_data = [];foreach ($data as $d) {&nbsp; &nbsp; if (isset($new_data[$d['code']]['ttl'])) {&nbsp; &nbsp; &nbsp; &nbsp; $new_data[$d['code']]['ttl'] += $d['count'];&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; $new_data[$d['code']]['ttl'] = $d['count'];&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP