将 2 个 foreach 循环合并为一个具有不同逻辑的循环

Combine 2 foreach loops into one with different logic

我正在寻找将 2 个 foraech 循环合并为一个的方法(合并 2 个函数): 结果函数应该 return 两者:($is - 布尔值和 $d - 数组)。 两个函数中的可遍历数据 - 相同。 可能吗?什么是好的解决方案?

public function func1($p, $c) {
    
    $is = 0;
    if (!empty($p)) {
        foreach($p as $k=>$v) {
                
            if ((!empty($c['prod']) && $c['prod'] == $v['ref'] && $c['status'])) {
                $is = 1;
                break;
            }
        }
    }
    
    return $is;
}

public function func2($p) {
    
    $d      = [];
    
    if (!empty($p)) {
        foreach($p as $k=>$v) {
                
            $prod = [
                'name'      => $v['name'], 
                'price'     => $v['price'],
                'reference' => $v['ref']                    
            ];
            
            $d[] = $prod;           
        }
    }
    
    return $d;
}

谢谢。

我的做法,但未经测试。

public function func3($p, $c) {
    $is = 0;
    $d = [];
    if (!empty($p)) {
        foreach($p as $k=>$v) {
            $d[] = [
                'name'      => $v['name'], 
                'price'     => $v['price'],
                'reference' => $v['ref']                    
            ];
         
            if ($is === 0 && (!empty($c['prod']) && $c['prod'] == $v['ref'] && $c['status'])) {
                $is = 1;
            }
        }
    }
    
    return [$is, $d];
}