在php中嵌套while循环

时间:2013-12-27 12:26:04

标签: php while-loop nested-loops

$i=0;
while($i <= $countstud)
{
    $j=0;
    while($j < $counteval)
    {
        if($i < $countstud)
        {
            $connection=Yii::app()->db;

            $sql='update exam_answers 
                set eval_id=:eval
                where student_id=:sid 
                and exam_id=:eid';
            $command1=$connection->createCommand($sql);
            $command1->bindParam(":eval",$eval[$j],PDO::PARAM_STR);
            $command1->bindParam(":sid",$studid[$i],PDO::PARAM_STR);
            $command1->bindParam(":eid",$examid,PDO::PARAM_STR);
            $command1->execute();
        }
        $j++;
        $i++;
    }
}

在这里,我的$ countstud为4,$ counteval为3.我想分配

$stud[0] = $eval[0], 
$stud[1] = $eval[1], 
$stud[2] = $eval[2], 
$stud[3] = $eval[0], 
$stud[4] = $eval[1] 

依此类推..直到$stud耗尽。

然而,在这里,它不起作用,它运行一次并退出循环..请帮助。

4 个答案:

答案 0 :(得分:0)

也许$ j ++必须在第二个while循环的结束括号之后?在第一个循环中,您正在检查$ countstud,但是您正在递增第二个while循环。

答案 1 :(得分:0)

我认为你根本不需要使用嵌套循环。只需在适当时重置$j

<?php
$i=0;
$j=0;
while($i < $countstud)
{
    $connection=Yii::app()->db;

    $sql='update exam_answers 
        set eval_id=:eval
        where student_id=:sid 
        and exam_id=:eid';
    $command1=$connection->createCommand($sql);
    $command1->bindParam(":eval",$eval[$j],PDO::PARAM_STR);
    $command1->bindParam(":sid",$studid[$i],PDO::PARAM_STR);
    $command1->bindParam(":eid",$examid,PDO::PARAM_STR);
    $command1->execute();

    $i++;
    $j++;
    if($j == $counteval)
    {
        $j=0;
    }
}
?>

答案 2 :(得分:0)

我会用foreach替换第一个,而使用无限迭代器替换第二个。

$connection=Yii::app()->db;
$sql='update exam_answers 
            set eval_id=:eval
            where student_id=:sid 
            and exam_id=:eid';

$iterator = new InfiniteIterator(new ArrayIterator($eval));

foreach($studid as $sid)
{           
        $c=$connection->createCommand($sql);
        $c->bindValue(":eval", $iterator->current(), PDO::PARAM_STR);
        $c->bindValue(":sid",  $sid,                 PDO::PARAM_STR);
        $c->bindValue(":eid",  $examid,              PDO::PARAM_STR);
        $c->execute();

        $iterator->next();
}

}

答案 3 :(得分:0)

我做了所有答案的组合,并且它有效!谢谢大家。

$connection=Yii::app()->db;
                    $sql='update exam_answers 
                        set eval_id=:eval
                        where student_id=:sid 
                        and exam_id=:eid';
                    $command1=$connection->createCommand($sql);
                    $j=0;
                    foreach($studid as $sid)
                    {
                        $command1->bindParam(":eval",$eval[$j],PDO::PARAM_STR);
                        $command1->bindParam(":sid",$sid,PDO::PARAM_STR);
                        $command1->bindParam(":eid",$examid,PDO::PARAM_STR);
                        $command1->execute();
                        $j++;
                        if($j == $counteval)
                        {
                            $j=0;
                        }
                    }