Przykładowe rozwiązanie z preg_match_all:
http://sandbox.onlinephpfunctions.com/code/6be0de9f9bdb1fbf4b94682ad784b76fd187bd0a
function count_spaces ($str) {
$result = preg_match_all('/\x20/', $str);
echo "W tym zdaniu jest $result spacji.";
}
i mała uwaga - piszesz o dopasowaniu spacji, a swoim regexp dopasowujesz również inne białe znaki. Ja dałem Ci przykład na dopasowanie wyłącznie spacji (czyli znaku o punkcie kodowym U+0020) - przeanalizuj jeszcze raz co dokładnie chcesz zliczać.
Metoda preg_match_all od razu obleci cały ciąg i zwróci ilość wszystkich znalezionych dopasowań.
Już bardzo dawno nie pracowałem w PHP więc nie dam sobie ręki uciąć czy ten kod jest zgodny z obecnymi zasadami pisania w PHP, tu niech się wypowiedzą osoby pracujące z tym na co dzień. Na szybko jednak tak właśnie bym ten problem rozwiązał.