Cita: Tengo en una variable un texto donde aparece varias veces la misma palabra o frase repetida.
El script remplazar todas las repeticiones de la palabra iphone por movil iphone.
Deberias chequear...... cuantas veces aparece esa palabra porque si aparece 3 vece y tienes solo 1 opcion....siempre habra repetidos.
Una forma de hacer esto.....es armar un array donde cargas todas las palabras que aparecen y luego lo ordenas por frecuencia de aparicion: asi... revisas el array mientras haya repetidos (mas de 2 apariciones de esa palabra).....y haces los reemplazos pertinentes
Dejas de procesar el array cuando empiezan a aparecer palabras 1 sola vez.
Hace un tiempo.....como parte de algo mas grande...hice una funcion que podrias investigar:
Código PHP:
Function densidades($str){
// unifico
$str = strtolower($str);
// Limipio de caracteres indeseables
$nostr = array("." ,"'" ,";" ,"!" ,"?" ,chr(34));
For ($i=0;$i<count($nostr);++$i){
$str = str_replace ($nostr[$i]," ",$str);
}
////////////////////////////////
$palabras = array();
$str = strtolower($str);
$excluidas = array("la","lo","las","los","a", "ante", "bajo", "cabe", "con", "contra", "de", "del", "desde", "durante", "en", "entre", "hacia", "hasta", "mediante", "para", "por", "pro", "segun", "sin", "so", "sobre", "tras", "versus", "via","yo","tu","el","ella","nosotros","vosotros", "ellos", "hacer","que","cuando","como","porque","un","una","uno","dos","tres","es","son","se","su","sus","ha","han","y","o","este","aquel","aquello","aquella","ese","esa","esos","menos","asi","no","si","tanto","subir","bajar","nos","vamos","voy","tener");
$palabras = explode (" ",$str); // puede haber repetidas
//$palabras = array ("samsung","ha","sido","la","empresa","lider");
// purgo de palabras vacias
$total = count($palabras);
for($i=0; $i < $total ; ++$i){
if ( strlen($palabras[$i])==0 ){
//unset( $palabras[$i] );
array_splice ($palabras,$i,1); // elimino elemento del array
}
}
//var_dump($palabras);
$total = count($palabras);
for($i=0; $i < $total ; ++$i){
if ( in_array(strtolower($palabras[$i]), $excluidas ) ){
array_splice ($palabras,$i,1); // elimino elemento del array
}
}
$palabras_no_rep = array();
$pesos = array();
$total = count($palabras);
for($i=0; $i < $total ; ++$i){
If ( !in_array($palabras[$i],$palabras_no_rep)){
$palabras_no_rep[count($palabras_no_rep)]= $palabras[$i];
$pesos[$palabras[$i]]=1;
}else{
++$pesos[$palabras[$i]];
}
}
/*
for($i=0; $i < $total ; ++$i){
echo $palabras_no_rep[$i]." ".$pesos[$palabras_no_rep[$i]]."<br/>";
}
*/
array_multisort($pesos,$palabras_no_rep); // array ordena array (array ordenador)
$matriz = array_combine($palabras_no_rep,$pesos); // unifico en una matriz para devolver en funcion
return ($matriz);
}
Enviale una cadena a esa funcion...y fijate la salida que genera
Suerte!