如何避免在使用for循环时重复?

时间:2018-10-17 14:06:14

标签: php

我正在发出sql请求,以从数据库中获取所有老师的学生 我的问题是,当我获取这些数据时,会显示名称 每个学生的老师, 我希望显示的内容如下:

示教1 学生1 学生2 学生3

但我却得到:

示教1 学生1教1 学生2教1 学生3教1

请帮助您解决此问题, 这是我的SQL请求:

SELECT a.name, b.nameTeacher 
FROM table1 b JOIN
     table2 a
     ON a.id_teacher = b.id ;

这就是我使用for循环循环数据

foreach($this->TeacherStudents as $key => $value){


  echo  $value['nameTeacher'];
  echo  '<a href="'.$url.'"> '.$value['name'].'</a>  <span class="badge">';


    }

3 个答案:

答案 0 :(得分:1)

您可以更改sql查询,以便它按顺序返回教师:

SELECT a.name, b.nameTeacher 
FROM table1 b JOIN
     table2 a
 ON a.id_teacher = b.id order by b.id;

然后更改for循环,以使其仅打印一次教师姓名:

$lastTeacher = null;
foreach($this->TeacherStudents as $key => $value){
    if($lastTeacher != $value['nameTeacher']) {
       echo  $value['nameTeacher'];
       echo '<br>';
       $lastTeacher = $value['nameTeacher'];
    }
    echo  '&nbsp;&nbsp;&nbsp;<a href="'.$url.'"> '.$value['name'].'</a><br>';
}

您忽略了如何构建$url,因此我也省略了。

答案 1 :(得分:1)

如果您的ORDER BY语句中没有SQL子句,另一种可能的方法是用键定义第二个数组-老师的名字和项目-每个老师的学生名字。

<?php

...
$output = array();
foreach($this->TeacherStudents as $key => $value){
    $teacher = $value['nameTeacher'];
    if (!array_key_exists($teacher, $output)) {
        $output[$teacher] = array();
    }   
    $output[$teacher][] = $value['name'];
}

foreach($output as $teacher => $students) {
    echo $teacher;
    foreach ($students as $key => $value) {
        echo '<a href="'.$url.'"> '.$value.'</a>  <span class="badge">';
    }   
}
...

?>

答案 2 :(得分:0)

您必须检查以下代码并获得结果。

$teacherWiseStdList = [];

foreach($this->TeacherStudents as $key => $value){
    $teacherWiseStdList[$value['nameTeacher']] = $value['name'];
}

现在,您必须按照以下方式打印结果。

foreach(teacherWiseStdList as $teacherName => $studentName) {

  if (array_key_exists($teacherName, $teacherWiseStdList)) {
    echo $teacherName;
  } else {
      echo  '<a href="yourUrl"> '.$studentName.'</a>  <span class="badge">';
  }

}