将多维数组中的值计数到新数组

时间:2018-07-17 14:34:07

标签: php arrays

我目前有以下数组:

Array
(
[0] => Array
    (
        [declaration_value] => 1
        [date] => 2018-07-16
        [client_id] => 3
        [declaration_id] => 12
    )

[1] => Array
    (
        [declaration_value] => 3
        [date] => 2018-07-16
        [client_id] => 3
        [declaration_id] => 12
    )

)

我如何获得以下数组结果:(如果日期/ client_id / declaration_id相同,则计算clarification_value)

Array
(
[0] => Array
    (
        [declaration_value] => 4
        [date] => 2018-07-16
        [client_id] => 3
        [declaration_id] => 12
    )
)

1 个答案:

答案 0 :(得分:1)

$listdb = [
        ["declaration_value" => 1, "date" => "2018-07-16", "client_id" => 3, "declaration_id" => 12],
        ["declaration_value" => 2, "date" => "2018-07-16", "client_id" => 2, "declaration_id" => 12],
        ["declaration_value" => 2, "date" => "2018-07-16", "client_id" => 2, "declaration_id" => 12],
        ["declaration_value" => 8, "date" => "2018-07-17", "client_id" => 2, "declaration_id" => 12],
        ["declaration_value" => 3, "date" => "2018-07-16", "client_id" => 3, "declaration_id" => 12],
    ];

    $sameKeys = ["date", "client_id", "declaration_id"];
    $sumKeys = ["declaration_value"];
    print_r(sum_my($listdb, $sameKeys, $sumKeys));

function sum_my(array $listdb = [], array $sameKeys = [], array $sumKeys = []): array {
    $newdb = [];
    if (empty($listdb) === true || empty($sameKeys) === true || empty($sumKeys) === true) {
        return $newdb;
    }

    foreach ($listdb as $value) {
        $ckKey = "";
        foreach ($sameKeys as $sameKey) {
            $ckKey .= $value[$sameKey];
        }
        if (isset($newdb[$ckKey])) {
            foreach ($sumKeys as $sumKey) {
                $newdb[$ckKey][$sumKey] += $value[$sumKey];
            }
        } else {
            $newdb[$ckKey] = $value;
        }
    }

    return $newdb;
}

谢谢您的提示,我已解决。