簡體   English   中英

PHP數組-鍵為數字時同一鍵的總和

[英]PHP array - Sum value of the same key when key are number

我的情況類似於此線程:

關聯數組,相同鍵的總和

但是就我而言,所有鍵都是數字。 我想減少/合並鍵0相似的數組,並對所有其他鍵求和。

這是我的原始數組:

Array
(
[0] => Array
    (
        [0] => 093042
        [1] => 3
        [2] => 0
        [4] => 0
    )

[1] => Array
    (
        [0] => 222032
        [1] => 0
        [2] => 13
        [4] => 0
    )

[2] => Array
    (
        [0] => 222032
        [1] => 0
        [2] => 0
        [4] => 15
    )

[3] => Array
    (
        [0] => 152963
        [1] => 45
        [2] => 0
        [4] => 0
    )

[4] => Array
    (
        [0] => 222032
        [1] => 0
        [2] => 7
        [4] => 0
    )

)

這是我需要的輸出:

Array
(
    [0] => Array
        (
            [0] => 093042
            [1] => 3
            [2] => 0
            [4] => 0
        )
    [1] => Array
        (
            [0] => 222032
            [1] => 0
            [2] => 20
            [4] => 15
        )
    [2] => Array
        (
            [0] => 152963
            [1] => 45
            [2] => 0
            [4] => 0
        )
)

其他線程的解決方案無法正常工作,因為它們使用了鍵名,而且我不知道如何適應這種情況。

請給我一個工作解決方案的例子。

回覆:

現在我嘗試這樣的事情:從其他線程

$sum = array_reduce($data, function ($a, $b) {
        if (isset($a[$b[0]])) {
             $a[$b[0]]['budget'] += $b['budget'];
        }
        else {
             $a[$b[0]] = $b;
        }
        return $a;
    });

但是此示例外觀僅適用於名為預算的鍵,但在我的情況下是數字,我有3個鍵[1] [2] [3]如何將鍵1,2,4相加,其中鍵0相似

這應該為您工作:

基本上,我只是遍歷您的數組,並檢查$result是否已經有一個元素,該元素具有$v的第一個元素的鍵。 如果沒有,我用array_pad()的0的ed數組+ foreach循環迭代的當前數組來初始化它。

在此之后,我遍歷$v每個元素,並期待第一個元素並將其添加到結果數組中。

最后,我只是用array_values()重新索引結果數組。

<?php

    foreach($arr as $v){

        if(!isset($result[$v[0]]))
            $result[$v[0]] = array_pad([$v[0]], count($v), 0);

        $count = count($v);
        for($i = 1; $i < $count; $i++)
            $result[$v[0]][$i] += $v[$i];


    }

    $result = array_values($result);
    print_r($result);

?>

輸出:

Array
(
    [0] => Array
        (
            [0] => 093042
            [1] => 3
            [2] => 0
            [3] => 0
        )

    [1] => Array
        (
            [0] => 222032
            [1] => 0
            [2] => 20
            [3] => 15
        )

    [2] => Array
        (
            [0] => 152963
            [1] => 45
            [2] => 0
            [3] => 0
        )

)

嘗試這個

$data = Array
(
    0 => Array
        (
            0 => 93042,
            1 => 3,
            2 => 0,
            4 => 0,
        ),
    1 => Array
        (
            0 => 222032,
            1 => 0,
            2 => 13,
            4 => 0,
        ),
    2 => Array
        (
            0 => 222032,
            1 => 0,
            2 => 0,
            4 => 15,
        ),
    3 => Array
        (
            0 => 152963,
            1 => 45,
            2 => 0,
            4 => 0,
        ),
    4 => Array
        (
            0 => 222032,
            1 => 0,
            2 => 7,
            4 => 0,
        ),
);

var_dump($data);


// grouping

$tab1 = array();

foreach ($data as $e) {

    if (!isset($tab1[$e[0]])) {
        $tab1[$e[0]] = array();
    }

    $tab1[$e[0]][] = $e;
}

//var_dump($tab1);


// summing

$tabSum = array();

foreach ($tab1 as $id => $t) {

    foreach ($t as $e) {

        unset($e[0]);

        if (!isset($tabSum[$id])) {
            $tabSum[$id] = $e;
        } else {
            foreach ($e as $key => $value) {
                $tabSum[$id][$key] += $value;
            }
        }

    }

}

var_dump($tabSum);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM