2009-02-17 21 views
9

que tienen una matriz:¿Cómo encontrar una cadena en una matriz en PHP?

$array = array("apple", "banana", "cap", "dog", etc..) up to 80 values. 

y una variable de cadena:

$str = "abc"; 

Si quiero comprobar si existe esta cadena ($str) en la matriz o no, utilizar la función de preg_match, que es así:

$isExists = preg_match("/$str/", $array); 

if ($isExists) { 
    echo "It exists"; 
} else { 
    echo "It does not exist"; 
} 

¿Es la manera correcta? Si la matriz crece, ¿será muy lenta? ¿Hay algún otro método? Estoy tratando de reducir el tráfico de mi base de datos.

Y si tengo dos o más cadenas para comparar, ¿cómo puedo hacer eso?

+0

pueden utilizar dos in_array() y array_search() Plaese ver el tutorial preparado por mí http://braincybersolutions.com/php-tutorial/php-search-in-array/ – syam

Respuesta

6

Si sólo necesita una coincidencia exacta, utilice in_array ($ cadena, $ array) - que será más rápido.

Otro enfoque sería utilizar una matriz asociativa con sus cadenas como la clave, que debe ser logarítmicamente más rápida. Sin embargo, supongo que verá una gran diferencia entre eso y el enfoque de búsqueda lineal con solo 80 elementos.

Si hace necesita una coincidencia de patrón, entonces tendrá que recorrer los elementos de la matriz para usar preg_match.


Has editado la pregunta para preguntar "¿y si quieres comprobar varias cadenas?" - se necesita para recorrer las cuerdas, pero se puede parar tan pronto como usted no recibe un partido ...

$find=array("foo", "bar"); 
$found=count($find)>0; //ensure found is initialised as false when no terms 
foreach($find as $term) 
{ 
    if(!in_array($term, $array)) 
    { 
     $found=false; 
     break; 
    } 
} 
4

preg_match espera que una cadena de entrada no sea una matriz. Si se utiliza el método que ha descrito usted recibirá:

Advertencia: preg_match() espera parámetro 2 sea cadena, matriz dada en LOCATION en la línea X

¿Quieres in_array:

if (in_array ($str , $array)) { 
    echo 'It exists'; 
} else { 
    echo 'Does not exist'; 
} 
+0

Si tengo 2 cuerdas, ¿cómo hacer coincidir en una matriz? – roa3

+0

la cadena como esta $ var "id1; id2"; – roa3

+0

La respuesta de Paul Dixon anterior responde bastante bien. – zi3guw

2

Si usted tiene más de un valor o bien se podía probar cada valor por separado la:

if (in_array($str1, $array) && in_array($str2, $array) && in_array($str3, $array) /* … */) { 
    // every string is element of the array 
    // replace AND operator (`&&`) by OR operator (`||`) to check 
    // if at least one of the strings is element of the array 
} 

O usted podría hacer un intersection tanto de las cuerdas y la matriz:

$strings = array($str1, $str2, $str3, /* … */); 
if (count(array_intersect($strings, $array)) == count($strings)) { 
    // every string is element of the array 
    // remove "== count($strings)" to check if at least one of the strings is element 
    // of the array 
} 
0

La función in_array() sólo detecta entradas completas si es un elemento de matriz. Si desea detectar una cadena parcial dentro de una matriz, cada elemento debe ser inspeccionado.

foreach ($array AS $this_string) { 
    if (preg_match("/(!)/", $this_string)) { 
    echo "It exists"; 
    } 
} 
Cuestiones relacionadas