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

两个getInvoiceItemsByType函数是否存在差异?求具体区别解析

两个PHP getInvoiceItemsByType 函数的差异解析

这两个函数的差异其实非常直观,咱们拆开细节说:

第一个函数(使用filter方法)

public function getInvoiceItemsByType($type) { 
    return $this->invoiceItems->filter(function ($invoice) use ($type) { 
        /** @var InvoiceItem $invoice */ 
        return $invoice->getType() == $type; 
    } ); 
}
  • 它会完整遍历$this->invoiceItems中的所有元素,把所有匹配$type的InvoiceItem对象筛选出来,返回一个包含这些对象的集合/数组(具体类型取决于$invoiceItems是Laravel Collection还是普通PHP数组)
  • 不管有多少个匹配项,都会全部保留,不会提前终止遍历
  • 永远不会返回null,哪怕没有匹配项,也会返回一个空的集合/空数组

第二个函数(使用foreach循环)

public function getInvoiceItemsByType($type) { 
    foreach ($this->invoiceItems as $invoice) { 
        if ($invoice->getType() == $type) { 
            return $invoice; 
        } 
    } 
    return null; 
}
  • 它会遍历$this->invoiceItems,找到第一个匹配$type的对象就立刻返回,不会继续检查剩下的元素
  • 如果遍历完所有元素都没有找到匹配项,才会返回null
  • 最多只会返回一个匹配的InvoiceItem对象,或者null

举个实际场景例子:假设$invoiceItems里有3个类型为'product'的项,第一个函数会返回包含这3个项的集合,而第二个函数只会返回第一个遇到的'product'类型的项。

内容的提问来源于stack exchange,提问作者j.y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:47:18