【问题标题】:Combine 2 foreach loops into one with different logic将 2 个 foreach 循环合并为一个具有不同逻辑的循环
【发布时间】:2021-10-27 06:56:27
【问题描述】:

我正在寻找将 2 个 foraech 循环合并为一个的方法(合并 2 个函数): 结果函数应该同时返回:($is - boolean & $d - array)。 两个函数中的可遍历数据 - 相同。 可能吗?什么是一个好的解决方案?

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;
}

谢谢。

【问题讨论】:

  • 只需将您当前在两者中所做的结合起来,然后删除 break 语句(因为您仍然希望在此之后处理其余记录,用于您的第二部分功能。)由于函数只能返回 一个 数据项,因此您必须将 $is 和 $d 放入数组或对象中,然后返回。
  • 谢谢,你能提供一些代码示例吗?
  • 这很简单。请至少自己先尝试一下,而不是立即条件反射地要求示例。

标签: php arrays loops foreach


【解决方案1】:

我的看法,但未经测试。

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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多