2009-02-17 7 views
9

Ich habe ein Array:Wie finde ich einen String in einem Array in PHP?

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

und ein String-Variable:

$str = "abc"; 

Wenn ich, ob diese Zeichenfolge ($str) in einem Array existiert überprüfen will oder nicht, ich benutze die preg_match Funktion, Das ist wie folgt:

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

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

Ist es der richtige Weg? Wenn das Array größer wird, wird es sehr langsam sein? Gibt es eine andere Methode? Ich versuche, den Datenbankverkehr zu verringern.

Und wenn ich zwei oder mehr Zeichenfolgen zum Vergleich habe, wie kann ich das tun?

+0

können zwei Funktions in_array() verwenden, und array_search() Plaese das Tutorial zu sehen, die durch mich http://braincybersolutions.com/php-tutorial/php-search-in-array/ – syam

Antwort

6

Wenn Sie eine exakte Übereinstimmung nur benötigen, verwenden in_array ($ str, $ array) - es wird schneller sein.

Ein anderer Ansatz wäre, ein assoziatives Array mit Ihren Strings als Schlüssel zu verwenden, der logarithmisch schneller sein sollte. Sie werden jedoch einen großen Unterschied zwischen dem linearen Ansatz und der linearen Suche mit nur 80 Elementen sehen.

Wenn Sie tun benötigen eine Musterübereinstimmung, dann müssen Sie die Array-Elemente Schleife über preg_match.


Sie haben die Frage bearbeitet, um zu fragen "Was ist, wenn Sie nach mehreren Strings suchen möchten?" - Sie werden über diese Strings Schleife benötigen, aber Sie können unterbrochen werden, sobald Sie kein Spiel bekommen ...

$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 erwartet eine Zeichenfolge Eingabe kein Array. Wenn Sie die Methode, die Sie beschrieben verwenden erhalten Sie:

Warning: preg_match() erwartet Parameter 2 String, Array in LOCATION der Linie X

Sie wollen in_array gegeben sein:

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

Wenn ich 2 string, wie passt man in ein Array ??? – roa3

+0

der String wie folgt $ var "id1; id2"; – roa3

+0

Die Antwort von Paul Dixon beantwortet das sehr gut. – zi3guw

2

Wenn Sie mehr als einen Wert haben können Sie entweder jeden Wert testen separatly:

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 
} 

Oder Sie könnten eine intersection sowohl die Saiten und das Array tun:

$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

Die Funktion in_array() erfasst nur vollständige Einträge, wenn ein Array-Element. Wenn Sie einen Teilstring innerhalb eines Arrays erkennen möchten, muss jedes Element überprüft werden.

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