php多个foreach错误

时间:2017-08-28 20:29:43

标签: php pdo

我有两个数组,我在插入数据库方面遇到了问题

 foreach ($turma as $idTurma){
            foreach ($aluno as $numAlunos){
                $this->setTabelaVisitasTurmas($id_ano, $idTurma, $idVisita, $numAlunos);
            }
        }
例如,第一个数组是1,2,3,4 第二个数组是2,12,17,16

而不是给我4条记录,它给出了16条错误的记录......

 //Tabela VisitasTurmas
public function setTabelaVisitasTurmas($id_ano, $idTurma, $idVisita, $numAlunos){
    try{
        $stmt = $this->db->prepare("INSERT INTO visitasturmas (idVisita,idTurma,numAlunos,idAnoEscolar) VALUES(:idVisita,:idTurma,:numAlunos,:idAnoEscolar);");
        $stmt->bindparam(":idAnoEscolar", $id_ano);
        $stmt->bindparam(":idTurma", $idTurma);
        $stmt->bindparam(":idVisita", $idVisita);
        $stmt->bindparam(":numAlunos", $numAlunos);
        if(!$stmt->execute()){
            print_r($stmt->errorInfo());
            return array('status' => 'error', 'message' => 'Problema ao gravar esta nova atividade na tabela referencial...');
        }else{
            return $resultado = true;
        }
    }catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

2 个答案:

答案 0 :(得分:0)

没错。您正在使用以下

执行2个嵌套的foreach循环
A2

什么是4 * 4?

你猜对了,16。

您正在插入16行,而不是4行。您对foreach的理解不正确或者您无法成倍增加。

答案 1 :(得分:0)

你说第一个数组是1,2,3,4

$turma = array(1, 2, 3, 4);

第二个数组是2,12,17,16

$aluno = array(2, 12, 17, 16);

您获得的是预期的行为(16条记录)。您告诉该计划,$turma中的每个项目都会浏览$aluno中的每个项目。 4x4 = 16

这就是发生的事情......

$idTurma = 1, $numAlunos = 2
$idTurma = 1, $numAlunos = 12
$idTurma = 1, $numAlunos = 17
$idTurma = 1, $numAlunos = 16

$idTurma = 2, $numAlunos = 2
$idTurma = 2, $numAlunos = 12
$idTurma = 2, $numAlunos = 17
$idTurma = 2, $numAlunos = 16

$idTurma = 3, $numAlunos = 2
$idTurma = 3, $numAlunos = 12
$idTurma = 3, $numAlunos = 17
$idTurma = 3, $numAlunos = 16

$idTurma = 4, $numAlunos = 2
$idTurma = 4, $numAlunos = 12
$idTurma = 4, $numAlunos = 17
$idTurma = 4, $numAlunos = 16

如果你只想要四个记录,那么你可能不应该有第二个foreach循环,而是可能在插入数据库之前想要一起添加一些值。