Te falla porque hay un error de sintaxis en el código. Está mal definido el array. Proba así:
Código PHP:
<?php
function contar($texto){
$array = array_filter(preg_split('/[\s\.\,]+/s', strtolower($texto)), function($palabra){
if (in_array($palabra, array('loca', 'idiota', 'viagra'))) return $palabra;
});
foreach (array_count_values($array) as $k => $v) echo $k . ': ' . $v . '<br />';
}
contar('la loCa del bosque era muy loca y entonces enloquecio muy LOCA mente. Locura');
contar('La idiota estuvo insistiendo por lo iDioTa que es. Además, es una loca y su marido consume vIaGRa.');
?>
Igualmente no veo necesidad de seguir posteando código en un tema que ya fue marcado como solucionado Alexis88. El preguntó por qué su función no anaba y se le respondió. Lo de optimizar 10 líneas de código es cosa de cada uno :P Saludos