我有一個包含所有記錄的陣列。我將所有這些記錄傳遞給一個回圈,在那里我得到了具有空值的清除列的總和。
這部分作業正常,現在我的要求是我想再添加一個基于另一列的檢查refund。
如果任何列包含refund=1應從總數中減去該金額,請您幫我實作該場景
foreach ($row_data as $key => $value) {
$data_arr[$key]['total'] = ['Price'=> $value->whereIn('clear', null)->sum('amount')];
}
資料
data = [
{'amount' => 55, 'clear' => 'null', 'refund' => '0'},
{'amount' => 5, 'clear' => 'null', 'refund' => '1'},
{'amount' => 10, 'clear' => 'null', 'refund' => '0'},
];
預期結果是:- 60
實際結果是:- 70
uj5u.com熱心網友回復:
減少應該有幫助。
$data = [
['amount' => 55, 'clear' => null, 'refund' => '0'],
['amount' => 5, 'clear' => null, 'refund' => '1'],
['amount' => 10, 'clear' => null, 'refund' => '0'],
];
你可以非常明確
// sum if refund is 0, substract if refund is 1
$sum = collect($data)
->where('clear', null)
->reduce(function ($carry, $item) {
if ($item['refund'] == '0') {
return $carry $item['amount'];
} elseif ($item['refund'] == '1') {
return $carry - $item['amount'];
}
}, 0);
或者寫短一點
// sum if refund is 0, substract otherwise
$sum = collect($data)
->where('clear', null)
->reduce(fn($carry, $item) => ($item['refund'] == '0')
? $carry $item['amount']
: $carry - $item['amount']);
您甚至可以在不使用 phparray_reduce和array_filter函式的集合的情況下做到這一點。幾乎以相同的方式作業。
$sum = array_reduce(
array_filter($data, function ($item) {
return $item['clear'] == null;
}),
function($carry, $item) {
return $item['refund'] == '0'
? $carry $item['amount']
: $carry - $item['amount'];
});
$sum = array_reduce(
array_filter($data, fn($item) => $item['clear'] == null)
fn($carry, $item) => $item['refund'] == '0'
? $carry $item['amount']
: $carry - $item['amount']
);
uj5u.com熱心網友回復:
我沒有你所有的帶有變數宣告的代碼,所以我用你的用例創建了邏輯片段。
編輯:您可以簡單地獲取您的總金額并減去您的總退款,如下面的代碼所示
/** @var Collection $data */
$data = collect([
['amount' => 55, 'clear' => null, 'refund' => false],
['amount' => 5, 'clear' => null, 'refund' => true],
['amount' => 10, 'clear' => null, 'refund' => false],
]);
$totalAmount = $data->whereNull('clear')->sum('amount');
$totalRefund = $data->whereNull('clear')
->where('refund', true)
->sum('amount'); // = 5
$subValue = $totalAmount - $totalRefund
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414581.html
標籤:
下一篇:在資料庫中存盤Perl哈希資料
