Foros del Web » Programando para Internet » PHP »

detectar palabras y repeticiones en cadena

Estas en el tema de detectar palabras y repeticiones en cadena en el foro de PHP en Foros del Web. Hola amigos! Tengo que detectar las posiciones en que aparece una palabra en una cadena y eso para más de una palabra. La cadena puede ...
  #1 (permalink)  
Antiguo 17/11/2011, 04:55
 
Fecha de Ingreso: octubre-2011
Mensajes: 36
Antigüedad: 10 años, 10 meses
Puntos: 2
Exclamación detectar palabras y repeticiones en cadena

Hola amigos!

Tengo que detectar las posiciones en que aparece una palabra en una cadena y eso para más de una palabra. La cadena puede tener una longitud variable.

P.ej. en cadena "abxxxcocheasamcasaoycochesdfsfcochekdkcasa" -> coche sale en las posiciones 5, 20, 30 y casa en 14

El resultado a obtener es, siguiendo ese mismo orden de posiciones, imprimir en pantalla el texto "BMW" (caso 'coche') y "EDIFICIO" (caso 'casa') para cada una de esas veces.

Siguiendo el ejemplo anterior, el resultado tendría que ser -> BMW BMW BMW EDIFICIO

El problema:


-> Trabajo en el código de más abajo, pero no sé como "automatizarlo", bien con alguna función, bucle, etc.

-> He probado también con la función substr_compare, pero todavía me lío más.

-> ¿Quizás mi planteamiento de partida no es correcto?

Gracias por adelantado.


Código PHP:
$cadena 'abxxxcocheasamcasaoycochesdfsfcochekdkcasa';
$encuentrame 'coche';
$posicion strpos($cadena$encuentrame);

echo 
'Cadena: ' .$cadena.'<br>';
echo 
'Longitud cadena: ' .strlen($cadena).'<br />';

if (
$posicion == false) {
    echo 
"La cadena '$encuentrame' no está en '$cadena'";
} else {
    
//caso 'coche'
    
$coche 1//para imprimir después la palabra 'BMW'
    
echo "La cadena '$encuentrame' está en la posición $posicion de '$cadena'";

  #2 (permalink)  
Antiguo 17/11/2011, 07:45
 
Fecha de Ingreso: noviembre-2011
Mensajes: 55
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: detectar palabras y repeticiones en cadena

y te es necesario detectar las posiciones? o solo quieres saber cuantas veces reemplazar las palabras...
  #3 (permalink)  
Antiguo 17/11/2011, 08:22
 
Fecha de Ingreso: noviembre-2011
Mensajes: 55
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: detectar palabras y repeticiones en cadena

Código PHP:
Ver original
  1. $cadena = 'abxxxcocheasamcasaoycochesdfsfcochekdkcasa';
  2.  echo 'Cadena: ' .$cadena.'<br>';
  3.  
  4. $palabras = array("casa", "coche","fsf");
  5. $palabras_reemplazar = array("EDIFICIO", "BMW","OTRAS");
  6. $y=0;
  7. foreach($palabras as $encuentrame){
  8.    
  9.     $cadena = 'abxxxcocheasamcasaoycochesdfsfcochekdkcasa';
  10.     $valida_existe = substr_count($cadena,$encuentrame);
  11.     if ($valida_existe == 0) {
  12.         echo "<br>La cadena '$encuentrame' no está en '$cadena' <br>";
  13.     } else {
  14.         $largo_encuentra = strlen($encuentrame);
  15.         for($x=0; $x < strlen($cadena); $x++){
  16.             $posic_x = strpos($cadena, $encuentrame, $x);
  17.             if($posic_x > 0){
  18.                 $posicion[] = $posic_x;
  19.                 $x = $x+$largo_encuentra;
  20.             }
  21.            
  22.         }
  23.        
  24.         $posicion = array_unique($posicion);
  25.         $posicion = implode(",",$posicion);
  26.        
  27.         echo "<br><br>La cadena '$encuentrame' existe ($valida_existe) en las posiciones ($posicion) en la '$cadena' <br>";
  28.         $cadena = str_replace($encuentrame,"<b>".$palabras_reemplazar[$y]."</b>",$cadena);
  29.         echo $cadena;
  30.         $posicion = array();
  31.     }
  32.     $y++;
  33. }

Prueba con eso, creo que igual se puede seguir optimizando y acortando el codigo ...

saludos
  #4 (permalink)  
Antiguo 17/11/2011, 11:18
 
Fecha de Ingreso: octubre-2011
Mensajes: 36
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: detectar palabras y repeticiones en cadena

Hola prcarreno,

Antes de nada, gracias! por tu tiempo.

Lo que pasa es que ese código primero analiza la primera palabra y reemplaza, luego la segunda y reemplaza... y así, 'X' veces.

Pero yo necesito que...

1) Partiendo de una cadena -> "abxxxcocheasamcasaoycochesdfsfcochekdkcasa"

2) Sustituya -> "coche" por "BMW" y "casa" por "EDIFICIO"

3) El resultado final sea una única cadena que imprima sólo lo reemplazado (y sin el resto de la cadena) -> BMW EDIFICIO BMW BMW EDIFICIO

¿Alguna idea, por favor?
  #5 (permalink)  
Antiguo 17/11/2011, 13:18
 
Fecha de Ingreso: noviembre-2011
Mensajes: 55
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: detectar palabras y repeticiones en cadena

Código PHP:
Ver original
  1. $cadena = 'cocheabxxxcocheasamcasaoycochesdfsfcochekdkcasacoche';
  2. echo 'Cadena: ' .$cadena.'<br>';
  3.  
  4. $palabras = array("casa", "coche","fsf");
  5. $palabras_reemplazar = array("EDIFICIO", "BMW","OTRAS");
  6. $y=0;
  7. foreach($palabras as $encuentrame){
  8.     $cadena = str_replace($encuentrame,"<b> ".$palabras_reemplazar[$y]." </b>",$cadena);
  9.     $y++;
  10. }
  11. echo "<br>Cadena Final: <b>".ereg_replace ("[^ A-Z]", "", $cadena)."</b>";
  #6 (permalink)  
Antiguo 17/11/2011, 13:19
 
Fecha de Ingreso: noviembre-2011
Mensajes: 55
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: detectar palabras y repeticiones en cadena

Código PHP:
Ver original
  1. $cadena = 'cocheabxxxcocheasamcasaoycochesdfsfcochekdkcasacoche';
  2. echo 'Cadena: ' .$cadena.'<br>';
  3.  
  4. $palabras = array("casa", "coche","fsf");
  5. $palabras_reemplazar = array("EDIFICIO", "BMW","OTRAS");
  6. $y=0;
  7. foreach($palabras as $encuentrame){
  8.     $cadena = str_replace($encuentrame,"<b> ".$palabras_reemplazar[$y]." </b>",$cadena);
  9.     $y++;
  10. }
  11. echo "<br>Cadena Final: <b>".ereg_replace ("[^ A-Z]", "", $cadena)."</b>";
  #7 (permalink)  
Antiguo 18/11/2011, 05:31
 
Fecha de Ingreso: octubre-2011
Mensajes: 36
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: detectar palabras y repeticiones en cadena

Gracias, pero sale este error: "Deprecated: Function ereg_replace() is deprecated"
  #8 (permalink)  
Antiguo 18/11/2011, 07:51
 
Fecha de Ingreso: noviembre-2011
Mensajes: 55
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: detectar palabras y repeticiones en cadena

imagino debes tener una version de php superior a la mia...

la idea de esa funcion es borrar las minusculas que quedan en la cadena...
te recomiendo busques una funcion de acuerdo a la version de tu php, y puedes usar expresiones regulares para hacerlo.

O darte el animo de hacer una funcion que reemplace todo el abecedario en minusculas por espacio en blanco.... se me ocurre eso...
porque a mi me funciono bien ese codigo.
saludos,
  #9 (permalink)  
Antiguo 18/11/2011, 14:02
 
Fecha de Ingreso: octubre-2011
Mensajes: 36
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: detectar palabras y repeticiones en cadena

Ok, gracias!

Etiquetas: palabras, repeticiones, variables, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:15.