Esto lo tendrás en una bbdd luego es mucho mas facil hacerlo en la consulta que crea el array.
    
esto te da los datos tal y como los necesitas. 
En php tambien se puede hacer pero es mucho mas complicado, deberias ordenar el array por nombre, y luego sumar mientras el nombre sea el mismo y buscar el maximo: 
Una función para ordenar el array 
array_orderby http://www.php.net/manual/en/functio...ort.php#100534    
Código PHP:
Ver original- $arrayOrdenado=array_orderby($array2,'nombre', SORT_ASC); 
- $nombre=$arrayOrdenado[0]["nombre"]; 
- $sumaPrecio=0; 
- $maximo=0; 
- for($p=0;$p<count($arrayOrdenado);$p++){ 
-      if($arrayOrdenado[$p]["nombre"]!=$nombre){ 
-           $arrayResumen[]["nombre"]=$nombre; 
-           $arrayResumen[]["sumaPrecio"]=$sumaPrecio; 
-           $arrayResumen[]["maximo"]=$maximo; 
-           $nombre=$arrayOrdenado[$p]["nombre"]; 
-           $sumaPrecio=0; 
-           $maximo=0; 
-       } 
-        $sumaPrecio=$sumaPrecio+$arrayOrdenado[$p]["precio"]; 
-         if($arrayOrdenado[$p]["maximo"]>$maximo) 
-                $maximo=$arrayOrdenado[$p]["maximo"]; 
- } 
- for($i=0;$i<count($arrayResumen);$i++){ 
-   
- echo $arrayResumen[$i]['nombre'] 
- echo $arrayResumen[$i]['sumaPrecio'] 
- echo $arrayResumen[$i]['maximo'] 
-   
- } 
Lo he hecho al vuelo, puede contener errores.