繁体   English   中英

添加数组值

[英]adding array values

Array
(
[0] => Array
    (
        [datas] => Array
            (
                [name] => lorem
                [id] => 1
                [type] => t1
                [due_type] => Q1
                [t1] => 1
                [t2] => 1
                [t3] => 1
            )

    )

[1] => Array
    (
        [datas] => Array
            (
                [name] => lorem
                [id] => 1
                [type] => t2
                [due_type] => Q1
                [t1] => 0
                [t2] => 1
                [t3] => 0
            )

    )

[2] => Array
    (
        [datas] => Array
            (
                [name] => name
                [id] => 2
                [type] => t1
                [due_type] => Q1
                [t1] => 1
                [t2] => 0
                [t3] => 1
            )

    )

[3] => Array
    (
        [datas] => Array
            (
                [name] => name
                [id] => 2
                [type] => t2
                [due_type] => Q1
                [t1] => 1
                [t2] => 0
                [t3] => 0
            )

    )

)

我想根据其ID添加每个数组的值,但是在使用这些代码获取值时遇到了问题:我想根据每个due_type计算所有类型的总和并将它们组合到一个数组中。

$totals = array();
$i = -1;
foreach($datas as $key => $row){
    $i += 1;
    $items[$i] = $row;

    if (isset($totals[$items[$i]['datas']['id']])){
        if($totals[$items[$i]['datas']['id']]['due_type'] == 'Q1'){

            if($totals[$items[$i]['datas']['id']]['type'] == 't1'){
                $t1+=$totals[$items[$i]['datas']['id']]['t1'];
            }elseif($totals[$items[$i]['datas']['id']]['type'] == 't2'){
                $t2+=$totals[$items[$i]['datas']['id']]['t2'];
            }elseif($totals[$items[$i]['datas']['id']]['type'] == 't3'){
                $t3+=$totals[$items[$i]['datas']['id']]['t3'];
            }
            $totals[$items[$i]['datas']['id']]['t1_total'] = $t1;
                    $totals[$items[$i]['datas']['id']]['t2_total'] = $t2;
        }
    }
    else {
        $totals[$items[$i]['datas']['id']] = $row['datas'];
        $totals[$items[$i]['datas']['id']]['t1_total'] = $items[$i]['datas']['t1'];
            $totals[$items[$i]['datas']['id']]['t2_total'] = $items[$i]['datas']['t2'];
    }
}

不知道您想要什么输出,但是这:

function condense($data, $condensed = array()) {

    foreach($data as $row) {
        $id = $row['datas']['id'];
        $due_type = $row['datas']['due_type'];
        $type = $row['datas']['type'];
        if(!array_key_exists($id, $condensed)) {
            $condensed[$id] = array();
        }
        if(!array_key_exists($due_type, $condensed[$id])) {
            $condensed[$id][$due_type] = array();
        }
        if(!array_key_exists($type, $condensed[$id][$due_type])) {
            $condensed[$id][$due_type][$type] = 0;
        }
        $condensed[$id][$due_type][$type] += $row['datas'][$type];
    }

    return $condensed;
}

$result = condense($data);

给你:

Array
(
    [1] => Array
       (
           [Q1] => Array
               (
                  [t1] => 1
                  [t2] => 1
               )
       )
    [2] => Array
       (
           [Q1] => Array
               (
                  [t1] => 1
                  [t2] => 0
               )
       )

)

我可能是错的,但是感觉就像您正在从数据库中读取那些数组一样。 在数据库本身中进行这样的操作可能会更容易:

这样的SQL语句将完成您打算做的事情:

SELECT count(1),type,due_type FROM Table GROUP BY type, due_type;

您可以使用PHP重新读取输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM