una parte extraer eliminar dividir caracteres caracter cadena buscar php string switch-statement url-parameters php-include

parte - strstr php



¿Cómo usar una instrucción de cambio de PHP para verificar si una cadena contiene una palabra(pero también puede contener otras)? (7)

A continuación, se basan en esta pregunta y esta respuesta , las soluciones que se me han ocurrido ( aunque todavía utilizo una selección de caso ).

Puede utilizar stristr() o strstr() . La razón por la que elegí usar stristr() en este caso es simplemente porque no distingue entre mayúsculas y minúsculas , y por lo tanto, es más robusta.

Ejemplo:

$linkKW = $_GET[''kw'']; switch (true){ case stristr($linkKW,''berlingo''): include ''berlingo.php''; break; case stristr($linkKW,''c4''): include ''c4.php''; break; }

También puede usar stripos() o strpos() si lo desea (gracias, Fractaliste ) , aunque personalmente me parece más difícil de leer. El mismo trato que el otro método anterior; Fui por el camino insensible al caso .

Ejemplo:

$linkKW = $_GET[''kw'']; switch (true){ case stripos($linkKW,''berlingo'') !== false: include ''berlingo.php''; break; case stripos($linkKW,''c4'') !== false: include ''c4.php''; break; }

Estoy usando un conmutador de PHP para incluir ciertos archivos basados ​​en las palabras clave entrantes que se pasan en un parámetro de la URL de la página.

La URL, por ejemplo, podría ser: ...page.php?kw=citroen%20berlingo%20keywords

Dentro de la página, me gustaría usar algo como esto:

<? switch($_GET[''kw'']){ case "berlingo": include ''berlingo.php'' break; case "c4": include ''c4.php''; break; } ?>

Lo que quiero hacer en el primer caso es incluir el archivo berlingo.php si el parámetro de palabra clave contiene berlingo , pero no tiene que ser exactamente esa palabra clave.

Por ejemplo, quiero incluir el archivo berlingo.php si la palabra clave es berlingo , pero también si es citroen berlingo .

¿Cómo puedo evaluar si una cadena dada contiene un valor utilizando una selección de caso de PHP (instrucción de cambio)?

Gracias.


Puede utilizar la función strpos() como:

if(strpos($_GET[''kw''],''berlingo'') !== false) { include ''berlingo.php''; } if(strpos($_GET[''kw''],''c4'') !== false) { include ''c4.php''; }


Sé que esto es MUY BIEN después del hecho, pero como un punto aparte, siempre se puede evitar el bucle por completo si se espera una relación 1: 1.

Algo a lo largo de las líneas de:

$map = array(''berlingo'' => ''berlingo.php'', ''c4'' => ''c4.php'', …); if( !isset( $map[$_GET[''kw'']] )) throw new Exception("Blah!!"); include $map[$_GET[''kw'']];

... solo compartir como FYI para novatos.


También puedes usar expresiones regulares en switch -> caso:

<?php $kw = filter_input(INPUT_GET, "kw"); switch($kw){ case (preg_match(''/*berlingo*/'', $kw) ? true : false): include ''berlingo.php''; break; case "c4": include ''c4.php''; break; } ?>


Ya que en una declaración de switch solo se realizará una prueba de igualdad simple, no te ayudará mucho aquí. strpos ejecutar la cadena a través de una función de coincidencia de cadenas, la más adecuada de las cuales es strpos . La respuesta directa es:

if (strpos($_GET[''kw''], ''berlingo'') !== false) { include ''berlingo.php''; } else if (strpos($_GET[''kw''], ''c4'') !== false) { include ''c4.php''; } … and so on …

La solución más elegante sería algo como esto:

$map = array(''berlingo'' => ''berlingo.php'', ''c4'' => ''c4.php'', …); foreach ($map as $keyword => $file) { if (strpos($_GET[''kw''], $keyword) !== false) { include $file; break; } }

O, si la correspondencia entre la palabra clave y el archivo es siempre 1: 1:

$keywords = array(''berlingo'', ''c4'', …); foreach ($keywords as $keyword) { if (strpos($_GET[''kw''], $keyword) !== false) { include "$keyword.php"; break; } }


strpos() es uno para comprobar si una cadena contiene otra cadena.

Hay otras funciones para verificar la similitud de cadenas, etc.

Sin embargo, un switch no funcionará, ya que compara expresiones estáticas con un solo valor. Tendrás que usar if s.


$keywords = array(''berlingo'', ''c4''); foreach($keywords as $keyword) if(strpos($_GET[''kw''], $keyword) !== FALSE) include("$keyword.php");

Sin embargo, no recomendaría incluir archivos php basados ​​en la entrada del usuario.