【问题标题】:Calculate some totals based on existing arrays根据现有数组计算一些总数
【发布时间】:2019-09-30 05:15:58
【问题描述】:

我想根据现有的多维数组计算一些总数

我的数组:

Array
(
    [0] => Array
        (
            [ORIGINE] => AL
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => QUINZE
        )
    [1] => Array
        (
            [ORIGINE] => SU
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => QUINZE
        )
    [2] => Array
        (
            [ORIGINE] => RE
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => MEMBRES
        )

    [3] => Array
        (
            [ORIGINE] => SL
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => MEMBRES
        )

    [4] => Array
        (
            [ORIGINE] => BE
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => EST
        )

    [5] => Array
        (
            [ORIGINE] => RP
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => EST
        )

    [6] => Array
        (
            [ORIGINE] => DF
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => TIERS
        )

    [7] => Array
        (
            [ORIGINE] => AR
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => TIERS
        )
)


I tried something like this :
public function calculateTotals($datas)
{
    $totals = [];
    foreach ($datas as $data) {
        $nextElement = next($data);
        foreach ($data as $key => $value) {
            if($data['GEOGRAPHIE'] == $nextElement['GEOGRAPHIE']) {
                if(!in_array($key, ['ORIGINE', 'GEOGRAPHIE'])) {
                    $totals[$key] += $value;
                }
            } else {

            }
        }
    }

    return $datas;
}

我们的想法是基于前一个数组构建一个新数组 + 计算每个 GEOGRAFIE 的总数并将其推送到数组中。因此,计算除“ORIGINE”和“GEOGRAPHIE”之外的所有列的总和,并将所有值放在以新“GEOGRAPHIE”开头的数组之后。像这样:

Array
(
    [0] => Array
        (
            [ORIGINE] => AL
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => QUINZE
        )
    [1] => Array
        (
            [ORIGINE] => SU
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => QUINZE
        )
    [2] => Array
        (
            [ORIGINE] => QUINZE
            [t] => 2
            [p] => 4
            [e] => 6
            [f] => 8
            [GEOGRAPHIE] => QUINZE
        )
    [3] => Array
        (
            [ORIGINE] => RE
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => MEMBRES
        )

    [4] => Array
        (
            [ORIGINE] => SL
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => MEMBRES
        )

    [5] => Array
        (
            [ORIGINE] => MEMBRES
            [t] => 2
            [p] => 4
            [e] => 6
            [f] => 8
            [GEOGRAPHIE] => MEMBRES
        )

    [5] => Array
        (
            [ORIGINE] => BE
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => EST
        )

    [6] => Array
        (
            [ORIGINE] => RP
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => EST
        )
    [7] => Array
        (
            [ORIGINE] => EST
            [t] => 2
            [p] => 4
            [e] => 6
            [f] => 8
            [GEOGRAPHIE] => EST
        )

    [8] => Array
        (
            [ORIGINE] => DF
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => TIERS
        )

    [9] => Array
        (
            [ORIGINE] => AR
            [t] => 1
            [p] => 2
            [e] => 3
            [f] => 4
            [GEOGRAPHIE] => TIERS
        )
    [10] => Array
        (
            [ORIGINE] => TIERS
            [t] => 2
            [p] => 4
            [e] => 6
            [f] => 8
            [GEOGRAPHIE] => TIERS
        )
)

【问题讨论】:

  • 为什么是 2,3,6,8?应该是 2,4,6,8
  • @quickSwap 是的,抱歉,我会更新问题
  • 请检查我的回答。如果需要任何帮助,请告诉我

标签: php arrays multidimensional-array php-7.1


【解决方案1】:

请查找我的内联文档以获得解释,

function calculateTotals($datas)
{
    $totals = [];
    $result = [];
    foreach ($datas as $key1 => $data) {
        $nextElement       = (!empty($datas[$key1 + 1]) ? $datas[$key1 + 1] : []); // checking for next element exists
        $result[]          = $data;
        $totals['ORIGINE'] = $data['GEOGRAPHIE']; // setting total array's ORIGINE and GEOGRAPHIE to merge
        foreach ($data as $key => $value) {
            if (!in_array($key, ['ORIGINE', 'GEOGRAPHIE'])) { // fetching only required keys
                $totals[$key] = (!empty($totals[$key]) ? $totals[$key] : 0);
                $totals[$key] += $value; // adding every other keys
            }
        }
        $totals['GEOGRAPHIE'] = $data['GEOGRAPHIE']; // setting total array's ORIGINE and GEOGRAPHIE to merge
        if (empty($nextElement) || $data['GEOGRAPHIE'] != $nextElement['GEOGRAPHIE']) { // checking if next is different then push
            array_push($result, $totals);
            $totals = []; // resetting total array
        }
    }
    return $result;
}

工作demo

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多