首页 > 解决方案 > PHP中的组数组项

问题描述

我有上面的数组:

| 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 岁。

所以我有 5 个学生的上述数组。从这个数组中,我将制作 3 个组,这些组将是上述的(2 组有 2 名学生符合标准,1 组有 1 名学生)。

你能帮助我吗?

谢谢

标签: php

解决方案


为什么不在查询中使用双重分组依据?

Group by Age , Disability

这实际上会将您的结果分为您想要的两组,因此您将保存 php 排序和那些多重iffor


推荐阅读