использование массива очень поможет вам автоматизировать весь процесс, вот способ решить проблему, может быть (почти наверняка) он не самый лучший, но я мог бы быть идеей.
//array with all languages (not andere's ones)
$langs = array(1=>"eng",2=>"fre",...);
//result array
$result = array();
//rsult array for others languages
$result['other'] = array();
foreach ($student_language as $sl)
{
//let's use a variable fot that index
$index = $langs[$sl['StudentLanguage']['language_id']];
//copy all info on relative language array element
$result[$index]['listening'] = $sl['StudentLanguage']['listening'];
$result[$index]['spoken'] = $sl['StudentLanguage']['speaking'];
$result[$index]['reading'] = $sl['StudentLanguage']['reading'];
$result[$index]['written'] = $sl['StudentLanguage']['written'];
//if other language
if(in_array($index,array(6,7,8,9,10,11,12)))
{
//create language array
$other = array();
//store language data
$other['listening'] = $sl['StudentLanguage']['listening'];
$other['spoken'] = $sl['StudentLanguage']['spoken'];
$other['reading'] = $sl['StudentLanguage']['reading'];
$other['written'] = $sl['StudentLanguage']['written'];
//add language to other's array
array_push($result['other'],$other);
}
}
таким образом, у вас будет такая структура:
-english
--listening
--spoken
--reading
--written
-french
--listening
--spoken
--reading
--written
...
-others
--0
---listening
---spoken
---reading
---written
....
, но я предлагаю вам относиться к другим языкам так же, как к основным, я думаю, что хорошо иметь "нормализованный"структура данных