簡體   English   中英

多維數組中值的加法

[英]Addition of values in multi-dimensional array

我有以下數組:

array:3 [▼
  0 => array:2 [▼
    "modId" => "3"
    "prdWt" => 1500.0
  ]
  1 => array:2 [▼
    "modId" => "8"
    "prdWt" => 50.0
  ]
  2 => array:2 [▼
    "modId" => "8"
    "prdWt" => 10.0
  ]
]

我想要實現的是,如果modId相同,則子數組應該將prdWt的值prdWt

我想要的是:

array:2 [▼
  0 => array:2 [▼
    "modId" => "3"
    "prdWt" => 1500.0
  ]
  1 => array:2 [▼
    "modId" => "8"
    "prdWt" => 60.0
  ]
]

到目前為止,我已經嘗試過的代碼:

//$prdModWt is the parent array coming from session
foreach ($prdModWt as $prd) {
    $val = $this->checkKey($prdModWt, 'modId', $prd['modId']);

    var_dump($val);

    $a[] = $this->sum_index($prdModWt, 'prdWt');
}

public function sum_index($arr, $col_name)
{
    $sum = 0;
    foreach ($arr as $item) {
        $sum += $item[$col_name];
    }
    return $sum;
}

public function checkKey($array, $key, $val)
{
    foreach ($array as $item) {
        if (isset($item[$key]) && $item[$key] == $val) {
            return true;
        }
    }
    return false;
}

我知道這太簡單了,但是我做不到。 所以請幫我。

PS父數組是動態的。。這意味着這些值僅來自會話,但是在從數據庫中獲取值之后,這些值將存儲在會話中。

您可以簡單地在單個循環中實現,就像

$arr = [["modId" => "3",
    "prdWt" => 1500.0
  ],["modId" => "8",
    "prdWt" => 50.0
  ],["modId" => "8",
    "prdWt" => 10.0
  ]
];

$result = [];
foreach($arr as $key => $value){
    $hash = $value['modId'];
    if(isset($result[$hash])){
        $result[$hash]['prdWt'] += $value['prdWt'];
    }else{
        $result[$hash]['modId'] = $value['modId'];
        $result[$hash]['prdWt'] = $value['prdWt'];
    }
}
print_r(array_values($result));

演示版

好吧,一個簡單的方法可以做到這一點(但丑陋的,我會嘗試一些簡單的方法):

$results = [];
foreach($array as $i => $item) {
    if($item['modId'] == $array[$i + 1]['modId']) {
        $results[] = ['modId' => $item['modId'], 'prdWt' => $item['prdWt'] + $array[$i + 1]['prdWt']];
    }
}

我相信您也可以輕松編寫一個遞歸解決方案

暫無
暫無

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

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