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

如何将两个遍历相同数据的foreach循环合并为支持多返回值的单个函数

需求可行性结论

该需求完全可以实现。两个原函数遍历的是完全相同的数据源$p,仅循环内执行的逻辑不同,合并后仅需一次遍历即可同时完成两类计算,相比分开调用两个函数还能减少一次数组遍历的开销,性能更优。

具体实现方案

注意原func1匹配到符合条件的项后会终止循环,但func2需要遍历完所有$p元素才能生成完整的$d数组,因此匹配到条件后仅做标记、不终止循环,合并后的代码如下:

public function mergedFunc($p, $c)
{
    // 初始化返回结果
    $result = [
        'is' => false, // 对应原func1返回值,直接用布尔类型比0/1更符合开发规范
        'd'  => []     // 对应原func2返回的数组
    ];

    if (empty($p)) {
        return $result;
    }

    // 一次遍历同时完成两类逻辑
    foreach ($p as $v) {
        // 原func2的逻辑:组装prod数组加入结果集d
        $result['d'][] = [
            'name'      => $v['name'],
            'price'     => $v['price'],
            'reference' => $v['ref']
        ];

        // 原func1的逻辑:判断是否匹配条件,已匹配过则跳过重复判断
        if (!$result['is'] && !empty($c['prod']) && $c['prod'] == $v['ref'] && !empty($c['status'])) {
            $result['is'] = true;
            // 此处不能加break,否则后续的prod项无法加入d数组
        }
    }

    return $result;
}
调用方式示例
// 调用合并后的函数
$res = $yourObject->mergedFunc($p, $c);
// 单独获取布尔结果
$is = $res['is'];
// 单独获取数组结果
$d = $res['d'];
可选优化点
  • 如果你的PHP版本 >= 7.1,可以使用数组解构语法直接赋值两个变量,写法更简洁:
    ['is' => $is, 'd' => $d] = $yourObject->mergedFunc($p, $c);
    
  • 如果业务场景不需要完整的$d数组,仅需要匹配项之前的部分数据,可以保留原func1的break逻辑,根据自身业务需求调整即可。
  • 如果需要兼容原func1返回0/1整型的格式,仅需把$result['is']的初始值改为0,匹配时赋值为1即可。

内容的提问来源于stack exchange,提问作者XTRUST.ORG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:09:00