PHP - Buscar una cadena dentro de otra

 
Vista:

Buscar una cadena dentro de otra

Publicado por BIg (2 intervenciones) el 28/07/2017 03:32:47
Hola, necesito algo de ayuda, intento conseguir el numero total de repeticiones de la cadena 2("la") dentro de la cadena1("La casa de la ladera"):

Gracias de antemano.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
$resultado=cuentaCadenas("La casa de la ladera","la");
 
echo "<p>Resultado $resultado</p>";
 
function cuentaCadenas($cad1,$cad2){
	$cont=0;
 
	for($i=0;$i<strlen($cad2);$i++){
		if($cad1[$i]==$cad2[$i]){
			$cont++;
		}
	}
return $cont++;
}
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Buscar una cadena dentro de otra

Publicado por kip (877 intervenciones) el 28/07/2017 03:53:38
Hola, casi lo tienes, el problema es que estas iterando sobre ambas cadenas directamente usando el tamaño de la subcadena a buscar en la cadena principal, te recomiendo primero convertir en un array la primera cadena e iterar sobre este para ir verificando si la subcadena se encuentra en la palabra con ayuda de la funcion strstr(), seria algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$resultado = cuentaCadenas("La casa de la ladera","la");
 
echo "<p>Resultado $resultado</p>";
 
function cuentaCadenas($cad1, $cad2){
    $cont=0;
    $arrayCad1 = explode(' ', $cad1);
    for ($i=0; $i < count($arrayCad1); $i++) {
        if (strstr($arrayCad1[$i], $cad2)) {
            echo 'La subcadena "'. $cad2 . '" se encuentra o es igual a la palabra "' . $arrayCad1[$i] . '"<br>';
            $cont++;
        }
    }
    return $cont;
}

Mostrara:

1
2
3
4
La subcadena "la" se encuentra o es igual a la palabra "la"
La subcadena "la" se encuentra o es igual a la palabra "ladera"
 
Resultado 2

He colocado un echo para que veas donde hace el match, ten en cuenta que se hace una verificacion tomando en cuenta mayusculas y minusculas, puedes usar stristr() en el caso de querer saltarte aquello.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buscar una cadena dentro de otra

Publicado por BIg (2 intervenciones) el 28/07/2017 04:00:05
Muchas gracias por la ayuda, que tendría que hacer para que me reconozca el primer "La", ya que estando en mayúscula no lo está contando. Y por ultimo, de que fomra podría evitar usar la funcion explode. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Buscar una cadena dentro de otra

Publicado por kip (877 intervenciones) el 28/07/2017 04:59:31
Arriba te coloque que para hacer el match sin considerar mayusculas o minusculas uses stristr(), para no usar explode() se vuelve mas tedioso porque debes comparar por palabras y en algun momento debes tener la palabra y verificar si existe en ella, podria quedar algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$resultado = cuentaCadenas("La casa de la ladera","la");
 
echo "<p>Resultado $resultado</p>";
 
function cuentaCadenas($cad1, $cad2){
    $cont=0;
    $palabra = '';
    for ($i = 0, $s = strlen($cad1); $i < $s; $i++) {
        $caracter = $cad1[$i];
        if ($caracter === ' ' || $i === ($s - 1)) {
            if ($i === ($s - 1)) {
                $palabra .= $caracter;
            }
            if (stristr($palabra, $cad2)) {
                echo 'La subcadena "'. $cad2 . '" se encuentra o es igual a la palabra "' . $palabra . '"<br>';
                $cont++;
            }
            $palabra = '';
        } else {
            $palabra .= $caracter;
        }
    }
    return $cont;
}

Pero es muy engorroso hacerlo de esa forma, no coloco expresiones regulares o algun otro metodo quizas mas facil y con menos lineas porque no es un tema para cuando recien se inicia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Buscar una cadena dentro de otra

Publicado por Yamil (888 intervenciones) el 28/07/2017 04:16:30
Seria algo como

1
2
3
4
5
$str = "La casa de la ladera";
$token = "la ";
 
$arr = explode($token, $str);
echo count($arr);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Buscar una cadena dentro de otra

Publicado por kip (877 intervenciones) el 28/07/2017 04:33:51
Yamil, el codigo que colocas no funciona como deberia, si vemos el array que retorna explode seria este:

1
2
3
4
5
Array
(
    [0] => La casa de
    [1] => ladera
)

Si bien muestra el valor correcto count() pero no es de confiar, veo tambien que colocas un espacio para que haga el explode en la cadena exacta no?, si colocamos 'casa' (sin espacio) nos devolvera 2 que es erroneo....

1
2
3
4
5
Array
(
    [0] => La
    [1] =>  de la ladera
)

Ahora bien si colocamos 'la' sin espacio retorna esto:

1
2
3
4
5
6
Array
(
    [0] => La casa de
    [1] =>
    [2] => dera
)

Parece que quizas funcionaria si le restamos un 1 siempre al valor retornado count() o tomamos el mayor indice del array, pero no lo veo fiable....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar