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

PHP遍历两个数组按相同account_id展示发票项如何避免重复

问题原因

你的代码使用了嵌套循环,每张发票都会遍历全部账户对象,因此每张发票会输出和账户数量一致的重复内容,同时原有调用getUsername/getCompany传参的逻辑也不符合对象方法的设计规范,账户自身的属性读取方法不需要传入外部参数。

解决方案

先将账户列表转换为以账户ID为键的映射表,遍历发票时直接通过account_id查找对应账户即可,不需要嵌套循环,时间复杂度也从O(n*m)降低到O(n+m):

<?php
// 第一步:预处理账户为ID为键的映射表
$accountMap = [];
foreach ($accounts as $account) {
    // 假设账户类提供getId()方法获取主键ID,没有的话替换为对应属性读取方式,比如$account->id
    $accountMap[$account->getId()] = $account;
}

// 第二步:遍历发票,直接查表取对应账户
foreach ($invoices as $invoice) {
    $accountId = $invoice->getAccountId();
    // 校验对应账户是否存在,避免非法数据报错
    if (!isset($accountMap[$accountId])) {
        continue;
    }
    $matchedAccount = $accountMap[$accountId];
    // 输出账户信息
    echo $matchedAccount->getUsername() . "<BR>";
    echo $matchedAccount->getCompany() . "<BR>";
    // 如果需要输出发票信息也可以在此处追加,例如:
    // echo '发票ID:' . $invoice->invoiceId . "<HR>";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:36:00