El problema que tienes, es que ambas applicaciones tiran output cuando las llamas. Por tanto, php se queda esperando que termine el output de la primera para ejecutar la segunda.
Esto se puede solucionar añadiendo " & " al final de cada system().
El problema, es que de igual modo, php y system() se quedaran a la espera de que finalicen estos programas para cerrarse.
La solucion es usar otro programa para iniciar los servicios. En el caso de windows, tienes el comando "start" con el parametro /b. Si los usas y ocultas la salida, te sale bien.
<?php
$services['mysql']='xampp/mysql/bin/mysqld';
$services['httpd']='xampp/apache/bin/httpd.exe';
foreach($services as $n=>$service){
echo 'Servicio ',$n,' iniciado.',PHP_EOL;
}
?>
start /b -> Inicia el proceso en la misma ventana.
parametro $r -> es para ocultar la salida, aunque en caso de stderr, lo seguira mostrando.
dirname(__FILE__) -> El directorio donde esta el .php actual.
De todos modos PHP no fue hecho para estas cosas xD. Mirate tambien otras funciones como
proc_open.
Saludos