我正在尝试根据客户和日期范围获取数组中所有“金额”元素的总和。我希望输出数组(最终结果)看起来像这样......
Array
(
[0] => stdClass Object
(
[company_name] => Yeung's Architects
[customer_id] => 3
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 1543.64
[account_id] => 75
)
[1] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 2177.27
[account_id] => 75
)
[2] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-05-19 00:00:00
[amount] => 295.45
[account_id] => 75
)
)
这是我正在使用的 sql 调用...
SELECT c.company_name
, i.customer_id
, a.name
, i.due_date
, li.amount
, li.account_id
FROM invoices i
JOIN customers c
ON c.customer_id = i.customer_id
JOIN invoices_line_items li
ON li.guid = i.guid
AND li.invoice_id = i.invoice_id
JOIN accounts a
ON a.guid = li.guid
AND a.account_id = li.account_id
WHERE i.guid = ?
AND i.date >= "'.$firstOfThisMonth.'" ',array($guid));
开始使用 sql 调用的结果数组...
Array
(
[0] => stdClass Object
(
[company_name] => Yeung's Architects
[customer_id] => 3
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 1362.73
[account_id] => 75
)
[1] => stdClass Object
(
[company_name] => Yeung's Architects
[customer_id] => 3
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 180.91
[account_id] => 75
)
[2] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 177.27
[account_id] => 75
)
[3] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-05-19 00:00:00
[amount] => 159.09
[account_id] => 75
)
[4] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-05-19 00:00:00
[amount] => 136.36
[account_id] => 75
)
[5] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Services
[due_date] => 2019-04-19 00:00:00
[amount] => 2000.00
[account_id] => 1
)
)
我目前用于尝试根据客户 ID 和发票月份汇总所有金额的代码。
$output = array($data[0]); $c = 1;
foreach ($data as $key => $value) {
if ($key > 0) {
if (in_array($value->customer_id,array_column($output, 'customer_id'))) {
$valueDate = substr($value->due_date,0,7);
foreach ($output as $k => $v) {
if ($v->customer_id == $value->customer_id) {
$vDate = substr($v->due_date,0,7);
if ($vDate == $valueDate) {
$output[$k]->amount = $output[$k]->amount + $value->amount;
} else {
$output[$c] = $value;
$c++;
}
}
}
} else {
$output[$c] = $value;
$c++;
}
}
}
return $output;
这是我上面提到的代码的最终结果......
Array
(
[0] => stdClass Object
(
[company_name] => Yeung's Architects
[customer_id] => 3
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 1543.64
[account_id] => 75
)
[1] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-04-19 00:00:00
[amount] => 2177.27
[account_id] => 75
)
[2] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-05-19 00:00:00
[amount] => 295.45
[account_id] => 75
)
[3] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Billable Expenses Income
[due_date] => 2019-05-19 00:00:00
[amount] => 136.36
[account_id] => 75
)
[4] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Services
[due_date] => 2019-04-19 00:00:00
[amount] => 2000.00
[account_id] => 1
)
[5] => stdClass Object
(
[company_name] => Clement's Cleaners
[customer_id] => 8
[name] => Services
[due_date] => 2019-04-19 00:00:00
[amount] => 2000.00
[account_id] => 1
)
)
前 3 个键是正确的结果,但随后添加了 3 个额外的键,我不确定它们是如何添加的。我的大脑现在坏了,请有人帮助我,任何帮助将不胜感激。