Возвращает 2 значения из многомерного ассоциативного массива


принимая этот массив:

$materias= array (
        array("nombre"=>"Juan","Programacion"=>8,"Redes"=>7,"Dise&ntildeo Web"=>10,"Conectividad"=>9,"Idiomas"=>8),

array("nombre"=>"Sofia","Programacion"=>9,"Redes"=>10,"Dise&ntildeo Web"=>6,"Conectividad"=>8,"Idiomas"=>7),

array("nombre"=>"Santiago","Programacion"=>10,"Redes"=>10,"Dise&ntildeo Web"=>9,"Conectividad"=>7,"Idiomas"=>9),

array("nombre"=>"Maria","Programacion"=>11,"Redes"=>12,"Dise&ntildeo Web"=>10,"Conectividad"=>9,"Idiomas"=>10),

array("nombre"=>"Damian","Programacion"=>7,"Redes"=>9,"Dise&ntildeo Web"=>10,"Conectividad"=>6,"Idiomas"=>6),
);

я хочу получить максимальную оценку по предмету и показать, какому ученику она соответствует. Я попробовал array_columns и max и получил максимальную ноту, но не смог заставить ее показать рядом с этим имя того, кому оно соответствует.

 2
php
Author: J.Saga, 2016-05-08

1 answers

Вы на правильном пути, это быстрое решение, без дополнительных проверок в случае, если массив пуст или ключ не существует, вы также не указали, как вы будете обрабатывать, когда два или более учеников имеют одну и ту же ноту, и это максимум, так что эта часть может быть заполнена:

function getBestStudent($materias, $materia)
{
    $notasMateria = array_column($materias, $materia);
    arsort($notasMateria);
    $resultado = 'Estudiante: ' . $materias[key($notasMateria)]['nombre'] . '<br>';
    $resultado .= 'Materia: ' . $materia . ' Nota: ' . $notasMateria[key($notasMateria)]; 

    return $resultado;
}

// En este caso para hallar la mejor nota (y estudiante) en Programacion
echo getBestStudent($materias, 'Programacion');
 0
Author: Shaz, 2016-05-08 23:09:31