Bueno .. en ese caso tu "numero" siempre va a ser un string, por ende deberías tratar el tema desde el punto de vista de "cadenas" (strings) ..
Ahora bien, tu conoces que bajo tus condiciones .. si algo contiene un . (punto) despues de hacer el str_replace() por si hay comas .. tendrías que buscar esa "coma" en la cadena obtenida para sabe si es un "float" (ya que no puedes usar is_float() por qué atiende al tipo de la variable ...).
Sería:
Código PHP:
<?php
$cad = 'METEO & WEBCAM Datos actuales en Camping Aquarius';
$cad .= '(Playa de Sant Pere Pescador) Fecha: 22 ago 2004 Hora Datos:';
$cad .= '04:14:44 (GMT+1) Temperatura Presión Humedad Velocidad del';
$cad .= 'viento Dirección del viento ºC ºF hPa % m/s Km/h kt Beaufort SW';
$cad .= 'Garbí 21 69,8 1019 61 0,48 1,7 1 1 Ultimas 24 h: grafica';
$matriz_cad = explode(' ',$cad);
foreach ($matriz_cad as $val) {
$val_usa = strtr($val,',.','.,'); // convetimos a numero americano
if (strpos($val_usa,'.')) $cad_transf[] = number_format($val_usa,2,',','.');
else $cad_transf[] = $val;
}
echo implode(' ',$cad_transf);
?>
A su vez .. para number_format() tendras que indicar el caracter de separador de dedimales y de miles.
Un saludo,