$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
耗尽。
然而,在这里,它不起作用,它运行一次并退出循环..请帮助。
答案 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;
}
}