Solo los de maestro y médico:
Código
SELECT DISTINCT(A.Provincia), B.Maestro, B.Medico FROM tabla1 AS A LEFT JOIN ( SELECT Provincia, COUNT(CASE WHEN Funcion='Maestro' THEN 1 ELSE NULL END) AS Maestro, COUNT(CASE WHEN Funcion='Medico' THEN 1 ELSE NULL END) AS Medico FROM tabla1 GROUP BY Provincia ) AS B ON A.Provincia=B.Provincia
Por columnas
Código
SELECT DISTINCT(A.Funcion), B.Valencia, B.Alicante FROM tabla1 AS A LEFT JOIN ( SELECT Funcion, COUNT(CASE WHEN Provincia='Valencia' THEN 1 ELSE NULL END) AS Valencia, COUNT(CASE WHEN Provincia='Alicante' THEN 1 ELSE NULL END) AS Alicante FROM tabla1 GROUP BY Funcion ) AS B ON A.Funcion=B.Funcion
Añade los demás igual que los dos ejemplos que tienes.
Para hacerlo en php tienes que hacer una consulta (como te dije antes en tu otro mensaje, con mysqli).
Normalmente si buscas un poco en google verás que la mayoria de las preguntas que tienes ya han sido respondidas miles de veces http://stackoverflow.com/a/10201105/4067132
Edito: error al copiar y pegar