我有上面的数组:
| Student First Name |Student Last Name | Age |Disability|
| Student_First_Name_1 |Student_Last_Name_1 | 30 | 1 |
| Student_First_Name_2 |Student_Last_Name_2 | 28 | 0 |
| Student_First_Name_3 |Student_Last_Name_3 | 21 | 0 |
| Student_First_Name_4 |Student_Last_Name_4 | 20 | 1 |
| Student_First_Name_5 |Student_Last_Name_5 | 22 | 0 |
我想按年龄和残疾来分类学生。 因此,如果我的代码正确运行,我将得到以上结果:
Student_First_Name_1:Student_First_Name_4
Student_First_Name_3:Student_First_Name_5
Student_First_Name_2
但是我有上面的内容:
Student_First_Name_1:Student_First_Name_4
Student_First_Name_3:Student_First_Name_5
Student_First_Name_2:Student_Last_Name_3
Student_First_Name_2:Student_Last_Name_5
我的代码是:
$StudentsForSID = $conn->prepare("SELECT * FROM members WHERE sid = :sid AND level = :level");
$StudentsForSID->execute([ 'sid' => $SelectedSID, 'level' => 'LRN_B1' ]);
while($row = $StudentsForSID->fetch(PDO::FETCH_ASSOC)){
$TempSelected[] = $row;
}
$count=count($TempSelected);
for($i=0; $i<$count-1; $i++){
for ($j = $i+1; $j < $count; $j++) {
if($TempSelected[$i]['disability']==$TempSelected[$j]['disability']){
if( abs($TempSelected[$i]['age']-$TempSelected[$j]['age']) <= 23 ){
$Student1 = $TempSelected[$j]['first_name'];
$Student2 = $TempSelected[$i]['first_name'];
print_r($Student1.'-'.$Student2.'<br/>');
}
}
}
}
我认为我的解释不太好。所以我编辑问题。 我想要的是: 我想让2名学生在残疾方面具有相同的价值,并且使2名学生之间的年龄差异等于或小于23岁。
所以我有五个学生的上述阵列。从这个数组中,我将分为3个组,每个组将是上面的组(2个组,其中2个学生符合条件,1个组,其中1个学生)。
你能帮我吗?
谢谢
答案 0 :(得分:0)
为什么在查询中不使用双分组方式?
Group by Age , Disability
这实际上会将您的结果按需要分组为两个组,因此您将保存php排序以及多个if
和for
。