PHP has many functions to handle arrays that greatly facilitate any work, I leave you an alternative:
//palabras a contar
$words=['hola','adios'];
//frase a usar para contar palabras
$frase='hola gato, hola perro, hola sol, adios nube, adios';
//eliminamos cualquier caracter que no sea una letra
$frase=preg_replace("/[^A-Za-z ]/", '', $frase);
//array_count_values hace el trabajo facil resumiendo el total
//de apariciones por cada elemento de un array .
$w=array_count_values(explode(' ',$frase));
var_export($w);
Posting result
array ( 'hola' => 3, 'gato' => 1, 'perro' => 1, 'sol' => 1, 'adios' => 2, 'nube' => 1 )
Filter words that interest me to search
//y finalmente nos quedamos con la interseccion de ambos arrays
$matches = array_intersect_key($w, array_flip($words));
var_export($matches);
Result
array ( 'hola' => 3, 'adios' => 2 )
Function and usage example
function contarPalabra($frase,$filtro){
$w=array_count_values(explode(' ',preg_replace("/[^A-Za-z ]/", '', $frase)));
return array_intersect_key($w, array_flip($filtro));
}
$frase='hola gato, hola perro, hola sol, adios nube, adios';
$cuenta = contarPalabra( $frase, ['gato']);
var_export($cuenta);
Testing
$words=['hola','adios'];
$frase='hola gato, hola perro, hola sol, adios nube, adios';
echo '<hr>';
$cuenta = contarPalabra( $frase, ['hola']);
var_export($cuenta);
echo '<hr>';
$cuenta = contarPalabra( $frase, ['perro']);
var_export($cuenta);
echo '<hr>';
$cuenta = contarPalabra( $frase, ['adios']);
var_export($cuenta);
Resumodos
array ( 'hola' => 3, )
array ( 'perro' => 1, )
array ( 'adios' => 2, )
On the PHP.net site you can find all the functions and definitions for managing arrays.
link