2012-09-18 13 views
6

que tienen una matriz que se parece a:php - la búsqueda de llaves en una matriz que coincide con un patrón

Array ([2.5] => ABDE [4.8] => Some other value) 

¿Cómo puedo encontrar cualquier par clave/valor en la clave coincide con un patrón? Sabré el valor del primer dígito en la clave, pero no el segundo. así que por ejemplo, usando un prefijo de "2", quiero de alguna manera poder encontrar la clave "2.5" y devolver tanto la clave como el valor "ABDE".

Estaba pensando acerca del uso de una expresión regular con un patrón como:

$prefix = 2; 
$pattern = '/'.$prefix.'\.\d/i'; 

y luego bucle a través de la matriz y la comprobación de cada tecla. (por cierto, solo para fines de demostración, $ prefijo ha sido codificado a 2, pero en el sistema real, este es un valor proporcionado por la entrada del usuario).

Me pregunto si hay una manera más simple de hacer esto?

Gracias.

+0

si el prefijo depende de la entrada del usuario, puede ser cualquier cosa, ¿verdad? –

+0

¿Puede el usuario ingresar a.a, a. * O el usuario está limitado a 2. *, 3. *, * .5 (números)? Y si están limitados a números, ¿están limitados al lugar de las décimas? Y finalmente, ¿las teclas ([2.5]) doblan como parecen ser o son cadenas? –

Respuesta

10

sólo tiene que recorrer la matriz y comprobar las claves

$array = array(...your values...); 

foreach($array as $key => $value) { 
    if (preg_match($pattern,$key)){ 
     // it matches 
    } 
} 

Usted puede envolver en una función y pasar su patrón como parámetro

+1

¿hay alguna forma de evitar el bucle? – dot

+2

esta no es la respuesta correcta, la correcta se puede encontrar más abajo, JvdBerg tiene la correcta. Hay una función en PHP específicamente para encontrar las llaves que coinciden en una matriz – patrick

29

Creo que se necesita algo como esto:

$keys = array_keys($array); 
$result = preg_grep($pattern, $keys); 

El resultado será una matriz que contiene todas las claves que coinciden con la expresión regular. Las teclas se pueden usar para recuperar el valor correspondiente.

Eche un vistazo a la función preg_grep.

5

vieja pregunta, pero aquí es lo que me gusta hacer:

$array = [ '2.5' => 'ABDE', '4.8' => 'Some other value' ]; 

preg_grep + array_keys encontrarán todas las claves

$keys = preg_grep('/^2\.\d/i', array_keys($array)); 

Puede añadir array_intersect_key y array_flip para extraer una porción de la matriz que se coincide con el patrón

$vals = array_intersect_key($array, array_flip(preg_grep('/^2\.\d/i', array_keys($array)))); 
+0

La array_keys era lo que necesitaba. +1 – DarkNeuron

0

Que son mis formas

$data = ["path"=>"folder","filename"=>"folder/file.txt","required"=>false]; 

// FIRST WAY 

$keys = array_keys($data); 
if (!in_array("path", $keys) && !in_array("filename",$keys) && !in_array("required",$keys)) { 
    return myReturn(false, "Dados pendentes"); 
} 

// SECOND WAY 

$keys = implode("," array_keys($data)); 
if (!preg_match('/(path)|(filename)|(required)/'), $keys) { 
    return myReturn(false, "Dados pendentes"); 
} 
Cuestiones relacionadas