2012-09-18 12 views
6

Ich habe ein Array, das wie folgt aussieht:php - der Suche nach Schlüsseln in einem Array, das mit einem Muster übereinstimmen

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

Wie würde ich alle Schlüssel/Wert-Paar zu finden, wo der Schlüssel zu einem Muster übereinstimmt? Ich kenne den Wert der ersten Ziffer im Schlüssel, aber nicht den zweiten. Wenn ich zum Beispiel ein Präfix von "2." verwende, möchte ich irgendwie den Schlüssel "2.5" finden und sowohl den Schlüssel als auch den Wert "ABDE" zurückgeben.

ich mit einem Muster eines regulären Ausdrucks über die Verwendung von wie dachte:

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

und dann Schleife durch das Array und Prüfen Sie jede Taste. (übrigens, nur zu Demonstrationszwecken wurde das $ Präfix auf 2 fest codiert, aber im realen System ist dies ein Wert, der von der Benutzereingabe geliefert wird).

Ich frage mich, ob es eine einfachere Möglichkeit gibt, dies zu tun?

Danke.

+0

Wenn das Präfix von Benutzereingaben abhängig ist, kann es alles sein, oder? –

+0

Kann der Benutzer a.a, a. * Eingeben oder ist der Benutzer auf 2 beschränkt? *, 3. *, * .5 (Nummern)? Und wenn sie auf Zahlen beschränkt sind, sind sie auf den Zehntelplatz begrenzt? Und endlich sind die Schlüssel ([2.5]) doppelt so, wie sie erscheinen oder sind sie Saiten? –

Antwort

10

Sie können einfach Schleife durch das Array und überprüfen Sie die Tasten

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

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

Sie können es in einer Funktion wickeln und Ihr Muster als Parameter übergeben

+1

gibt es eine Möglichkeit, Schleifen zu vermeiden? – dot

+2

dies ist nicht der richtige anwer, der richtige kann unten gefunden werden, hat JvdBerg den richtigen. Es gibt eine Funktion in PHP speziell zum Finden übereinstimmender Schlüssel in einem Array – patrick

29

Ich glaube, Sie brauchen etwas wie folgt aus:

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

Das Ergebnis wird ein Array sein, das alle Schlüssel enthält, die dem Regex entsprechen. Mit den Tasten kann der entsprechende Wert abgerufen werden.

Schauen Sie sich die preg_grep Funktion an.

5

alte Frage, aber hier ist, was ich tun möchte:

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

preg_grep + array_keys werden alle Schlüssel finden

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

Sie array_intersect_key hinzufügen und array_flip eine Scheibe des Arrays zu extrahieren, stimmt mit dem Muster überein

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

Die array_keys war was ich brauchte. +1 – DarkNeuron

0

Das sind meine Möglichkeiten

$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"); 
} 
Verwandte Themen