使用循环时返回

时间:2015-01-16 14:59:20

标签: php 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()”,那么所有数据都在那里。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

返回退出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循环中创建的临时变量(它会在每次迭代时被覆盖,因此它的最终值将用于所有查询),而是传递实际数组元件

答案 1 :(得分:0)

我建议在方法结束时移动return $this->values;,因为当遇到return语句时,它会返回$this->values的当前值,并且该方法不再执行之后。