# Associative arrays

Posted on

#### Question :

I need to create an associative array with 20 students containing: enrollment, name and height. And show the top 5 students in the class, showing only student enrollment and height.

What is the best way to do this exercise?

Use the usort function to sort the array, the auxiliary function `cmp` defines which the ordering criterion and is displayed only the top five students.

``````\$alunos = [
['nome' => "Doge", "matricula" => "M1", "altura" => 1.70 ],
['nome' => "João", "matricula" => "M2", "altura" => 1.90 ],
['nome' => "Pedro", "matricula" => "M4", "altura" => 1.50 ],
['nome' => "Mario", "matricula" => "M3", "altura" => 1.60 ],
['nome' => "A1", "matricula" => "M5", "altura" => 1.90 ],
['nome' => "A2", "matricula" => "M6", "altura" => 1.88 ]

];

function cmp(\$a, \$b) {
return \$a["altura"] < \$b["altura"];
}

usort(\$alunos, "cmp");

for(\$i=0; \$i<5;\$i++){
echo \$i .': '.  \$alunos[\$i]['nome'] .' - '.\$alunos[\$i]['altura'] .'<br>';
}
``````

Output:

``````0: A1 - 1.9
1: João - 1.9
2: A2 - 1.88
3: Doge - 1.7
4: Mario - 1.6
``````

A variation of the solution would use array_splice () to remove all items from the fifth position and use a foreach.

``````array_splice(\$alunos, 5);

foreach(\$alunos as \$item){
echo \$item['nome'] .' - '. \$item['altura'] .'<br>';
}
``````