使用“从”循环返回”


Use Return from while cycle

我找到多个关于将return用于一个周期的主题。但要说真的,一切都差不多。将数据循环插入数组,然后返回该数组。

我正在做的是循环,所以也许这是个问题,但我如何尝试我都无法让它工作。

public function getSolicData() {
    foreach ($this->solicStringConvert() as $solic){
        $success = false;
        try{
            $con = new PDO( DB_HOST, DB_USER, DB_PASS ); 
            $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $sql = "SELECT * FROM solic_code WHERE manufacturer = :manufacturer_code AND main_type = :main_type AND option_code = :option_code";
            $stmt_solic = $con->prepare( $sql );
            $stmt_solic->bindValue( "manufacturer_code", "06", PDO::PARAM_STR );
            $stmt_solic->bindValue( "main_type", "50", PDO::PARAM_STR );            
            $stmt_solic->bindValue( "option_code", $solic, PDO::PARAM_STR );      
            $stmt_solic->execute();
            $i= 0;
            while ($row = $stmt_solic->fetch()){
                //echo $row['description'];   
                //echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>TEXT</li>';
                //echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>&nbsp;"'.$row['description'].'"</li>';   
                echo $row['description'];
                echo "<br>";                
                $this->values[] = $row['description'];
                return $this->values;            
            }
        }catch(PDOExeption $e){
            echo $e->getMessage();
            echo $con->errorInfo();
        }
     } 
 }

代码对我来说看起来是逻辑,不幸的是它的输出是空白数组。代码的其他部分应该没问题,因为如果我使用 echo 而不是return我会得到很好的循环输出。另外,如果我将" return"替换为var_dump()则所有数据都在那里。

有人可以帮助我吗?

返回getSolicData函数的退出,因此您只执行循环的一次迭代。

只需将 return 语句放在末尾:

public function getSolicData() {
    $tempArray = $this->solicStringConvert();
    foreach ($tempArray as $key => $solic){
        $success = false;
        try{
            $con = new PDO( DB_HOST, DB_USER, DB_PASS );
            $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $sql = "SELECT * FROM solic_code WHERE manufacturer = :manufacturer_code AND main_type = :main_type AND option_code = :option_code";
            $stmt_solic = $con->prepare( $sql );
            $stmt_solic->bindValue( "manufacturer_code", "06", PDO::PARAM_STR );
            $stmt_solic->bindValue( "main_type", "50", PDO::PARAM_STR );
            $stmt_solic->bindValue( "option_code", $tempArray[$key], PDO::PARAM_STR );
            $stmt_solic->execute();
            $i= 0;
            while ($row = $stmt_solic->fetch()){
                //echo $row['description'];   
                //echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>TEXT</li>';
                //echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>&nbsp;"'.$row['description'].'"</li>';   
                echo $row['description'];
                echo "<br>";
                $this->values[] = $row['description'];
                // NOT HERE
            }
        }catch(PDOExeption $e){
            echo $e->getMessage();
            echo $con->errorInfo();
        }
    }
    return $this->values; //AT THE END
}

此外,bindValue 接受引用,因此您不能使用在 foreach 循环中创建的 temporay 变量(它每次迭代都会被覆盖,因此它的最终值将用于所有查询),而是传递实际的数组元素

我建议将return $this->values;移到方法的末尾,因为当遇到return语句时,它会返回$this->values的当前值,之后不会执行该方法的任何内容。