Details
Description
Two reasons:
1. The code checks for the presence of an array of grade items for each outcome, when it should be checking for whether the array is empty or not.
2. When there are no grade items using the outcome, an attribute of rowspan="0" is given to the cells, which breaks the table even more.