You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据ID从$bank_totals数组中筛选对应银行的amount值

从银行总额数组中筛选指定ID对应的金额值

我需要从$bank_totals数组中筛选出指定ID对应的amount值。$bank_totals由TransactionsRepository类的bank_balances()方法生成,该方法会遍历所有银行、计算各银行收支总额后,返回包含id、bank、amount的数组。我通过$data['id']获取用户输入的ID,比如当$data['id']=2时,希望得到对应金额25000.0,需要实现这个筛选逻辑。


现有调用代码

$bank_totals = $bank_totals->bank_balances();

数组示例

[
    [
        "id" => 1,
        "bank" => "KCB",
        "amount" => 7622.0
    ],
    [
        "id" => 2,
        "bank" => "I & M Bank",
        "amount" => 25000.0
    ]
]

bank_balances()方法代码

class TransactionsRepository
{
    public function bank_balances(){
        $banks_data = Bank::all();
        $banks_totals = [];

        foreach ($banks_data as $bank){
            $totals = (BankingTransactions::where('bank_id', $bank->id)->sum('amount')) -
                ((PettyCash::where('bank_id', $bank->id)->sum('amount')) + (PayDoctor::where('bank_id', $bank->id)
                        ->sum('total_paid')));
           array_push($banks_totals,
                [
                    'id'=>$bank->id,
                    'bank'=>$bank->name,
                    'amount'=>$totals,
                ]);
        }
        return $banks_totals;
    }
}

解决方案

方案1:基于已有数组筛选

如果已经获取了完整的$bank_totals数组,可通过以下方式筛选指定ID的金额:

方式A:foreach循环(高效直观)
$targetId = $data['id'];
$targetAmount = 0.0; // 默认值,防止找不到对应ID时出错

foreach ($bank_totals as $item) {
    if ($item['id'] == $targetId) {
        $targetAmount = $item['amount'];
        break; // 找到目标后立即终止循环
    }
}

// 输出结果
echo $targetAmount;
方式B:array_filter简化代码
$targetId = $data['id'];
$filteredItems = array_filter($bank_totals, function($item) use ($targetId) {
    return $item['id'] == $targetId;
});

// 取筛选结果的第一个金额,无匹配时返回0.0
$targetAmount = !empty($filteredItems) ? reset($filteredItems)['amount'] : 0.0;

方案2:优化原方法,减少不必要查询

如果仅需单个ID的金额,没必要查询所有银行数据,可修改bank_balances()方法添加可选参数,直接查询目标银行:

class TransactionsRepository
{
    // 添加$bankId可选参数,默认null表示查询全部银行
    public function bank_balances($bankId = null){
        // 根据参数查询对应银行
        $banksData = is_null($bankId) ? Bank::all() : Bank::where('id', $bankId)->get();
        $banksTotals = [];

        foreach ($banksData as $bank){
            $totals = (BankingTransactions::where('bank_id', $bank->id)->sum('amount')) -
                ((PettyCash::where('bank_id', $bank->id)->sum('amount')) + (PayDoctor::where('bank_id', $bank->id)
                        ->sum('total_paid')));
            $banksTotals[] = [
                'id'=>$bank->id,
                'bank'=>$bank->name,
                'amount'=>$totals,
            ];
        }

        // 指定ID时直接返回金额,否则返回完整数组
        return is_null($bankId) ? $banksTotals : (!empty($banksTotals) ? $banksTotals[0]['amount'] : 0.0);
    }
}

调用方式:

// 直接获取指定ID的金额
$targetAmount = $bank_totals->bank_balances($data['id']);
echo $targetAmount;

内容的提问来源于stack exchange,提问作者kennie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:31:01