从数据库表打印格式化的多维数组


printing formatted multi-dimensional array from database table

我有一个包含两个字段的数据库表,subject_id和teacher_id。subject_id字段中的数字表示数学、科学、英语等科目。teacher_id字段代表不同的教师。他们一起出现在同一行意味着老师1教科目2,或者在不同的行,老师1教主题5,或者在另一行,老师4教主题2,等等。这是一种多对多的关系。

从数据库中查询后,我得到了一个如下结构的数组:

Array
(
[0] => Array
    (
        [first_name] => bob
        [subject_en_name] => italian
    )
[1] => Array
    (
        [first_name] => bob
        [subject_en_name] => japanese
    )
[2] => Array
    (
        [first_name] => bob
        [subject_en_name] => korean
    )
[3] => Array
    (
        [first_name] => sally
        [subject_en_name] => math
    )
[4] => Array
    (
        [first_name] => sally
        [subject_en_name] => GMAT
    )

)

我需要筛选名字,然后打印出一个句子,比如:

Bob teaches italian, japanese, korean...
Sally teaches math, GMAT...

使用foreach结构

foreach ($teacher_object as $t_object)
{
    echo $t_object['first_name'] . " teaches " . $t_object['subject_en_name'] . "<br>";
}

我只能管理这些打印输出:

bob teaches italian
bob teaches japanese
bob teaches korean
sally teaches math
sally teaches GMAT

有没有一个php函数可以帮助我对数组进行排序?其他解决方案?

首先重新排列您的数组,这样您就有了一个以教师名称为索引、以类为子数组的新数组:

$teaches = array();
foreach ($teacher_object as $t_object) {
    $teaches[$t_object['first_name']][] = $t_object['subject_en_name'];
}

新阵列将如下所示:

Array
(
    [bob] => Array
        (
            [0] => italian
            [1] => japanese
            [2] => korean
        )
    [sally] => Array
        (
            [0] => math
            [1] => GMAT
        )
)

现在您有了一个更容易循环的数组。类似这样的东西:

foreach($teaches AS $teacher => $classes) {
    echo $teacher . " teaches " . implode(", ",$classes) . "<br/>";
}

给你。。。

bob teaches italian, japanese, korean
sally teaches math, GMAT