来自数组的PHP交叉表格式

来自数组的PHP交叉表格式,php,arrays,crosstab,Php,Arrays,Crosstab,嗨,我有一个像这样的PHP数组 $table=array(); $subject_names=array(); $subject_names[118]="English"; $subject_names[108]="Software Engeneering"; $table['Josh'][118]['int'] =55; $table['Josh'][118]['ext'] = 10; $table['Josh'][108]['int'] =45; $table['Josh'][108][

嗨,我有一个像这样的PHP数组

$table=array();
$subject_names=array();

$subject_names[118]="English";
$subject_names[108]="Software Engeneering";

$table['Josh'][118]['int'] =55;
$table['Josh'][118]['ext'] = 10;
$table['Josh'][108]['int'] =45;
$table['Josh'][108]['ext'] = 12;

$table['Matt'][118]['int'] =45;
$table['Matt'][118]['ext'] = 12;
$table['Matt'][108]['int'] =50;
$table['Matt'][108]['ext'] = 15;
    student |       English           |   Software Engeneering |
            | int. mark | ext. mark   | int. mark | ext. mark  |
    ___________________________________________________________
    Josh    | 55        | 10          | 45        | 12
    Matt    | 45        | 12          | 50        | 15
这里118和108是主题id,我正试图这样格式化它

$table=array();
$subject_names=array();

$subject_names[118]="English";
$subject_names[108]="Software Engeneering";

$table['Josh'][118]['int'] =55;
$table['Josh'][118]['ext'] = 10;
$table['Josh'][108]['int'] =45;
$table['Josh'][108]['ext'] = 12;

$table['Matt'][118]['int'] =45;
$table['Matt'][118]['ext'] = 12;
$table['Matt'][108]['int'] =50;
$table['Matt'][108]['ext'] = 15;
    student |       English           |   Software Engeneering |
            | int. mark | ext. mark   | int. mark | ext. mark  |
    ___________________________________________________________
    Josh    | 55        | 10          | 45        | 12
    Matt    | 45        | 12          | 50        | 15
我试过了

echo "Student Name\t";

foreach($subject_names as $sub_name)
{
    echo "$sub_name\t";
}
echo "<br>";    

foreach($table as $sname => $subjects){

    echo "$sname\t";

    foreach($subjects as $subject_name => $types)
    {
        foreach($types as $marks)
        {
            echo "$marks\t";
        }
    }
    echo "<br>";

}
它不会给出正确的结果。是否有任何方法确保结果始终正确


感谢您的帮助和建议

这是我根据您的要求编写的解决方案,使用
$subject\u names
作为控制而不是学生的分数表来选择分数(我希望您在查看代码后明白我的意思)

这是上面脚本的输出

Student Name    Software Engeneering    English 
Josh    45  12  55  10  
Matt    50  15  45  12  
通过问题中提供的脚本运行相同的数据,以下是输出(扭曲)

附言:“工程”应该是“工程”

我希望我能帮上忙。
干杯

我假设默认情况下,您不是硬编码这些值,而是从数据库中提取?这里的问题是,您的代码期望一切都处于完美的状态。如果你想把东西弄乱,你需要先把它分类。若你们希望发生这种情况,那个么若你们需要,我会很乐意提供更多的帮助。是的,我正从数据库中提取这些值。我将非常感谢您的任何帮助。好的,所以您只需要确保您正确排序您的数据库值。。。i、 e.
按学生、班级id、标记类型排序
更正数据顺序对他没有帮助。问题是什么时候数据出现问题。请阅读代码。。。我重新排列了数据,以表明我的算法不受数据顺序的影响,没有纠正它。对您不了解的内容进行向下投票并不好@AugwaI猜测它是可行的,但这仍然是一个糟糕的答案:)3个嵌套的foreach循环,这将以指数方式获得糟糕的性能。考虑哈佛大学2016。22000名学生,8000门课程,每个学生6门课程。1056000000次迭代。已接受。但发问者并没有说性能是他的问题,他显然在他的样本@Augwa中使用了三个嵌套的foreach循环
Student Name    Software Engeneering    English
Josh    55  10  45  12
Matt    45  12  50  15