PHP bir dizideki bir dize bulmak nasıl?

5 Cevap php

PHP bir dizi var varsayalım:

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

ve bir dize değişkeni:

$str = "abc";

Ben bu dize ($str) olup dizi veya değil var kontrol etmek istiyorsanız, ben preg_match işlevini kullanın. Hangi bu gibi:

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

if ($isExists){

    echo "Its exists";
} else {

 echo "Not exixts" 

} ;

O doğru yolu nedir? Dizi büyüdükçe, bu çok yavaş olacak? Başka bir yöntem var mı? Benim veritabanı trafiğini aşağı ölçekleme çalışıyorum. Siz yardımcı olur umarım ..

AFTER GET THE ANSWER: If i have two or more string to compare? How to do that?

5 Cevap

 bool in_array  ( mixed $needle  , array $haystack  [, bool $strict  ] )

http://php.net/manual/en/function.in-array.php

Sadece tam eşleşme gerekiyorsa, in_array ($ str, $ dizi) kullanın - daha hızlı olacaktır.

Başka bir yaklaşım logaritmik hızlı olmalı tuşu gibi dizeleri ile ilişkilendirilebilir bir dizi kullanmak olacaktır. Eğer rağmen sadece 80 unsurları ile bu ve doğrusal arama yaklaşımı arasında büyük bir fark görürsünüz şüpheliyim.

Eğer do bir desen maç gerekiyorsa, o zaman preg_match kullanmak için dizi elemanları üzerinde döngü gerekir.


Sormak için "ne birkaç dizeleri kontrol etmek istiyorsanız?" Sorusunu düzenlenebilir - Bu dizeleri üzerinde döngü gerekir, ancak en kısa sürede bir maç alamadım gibi durduramaz ...

$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;
   }
}

Neden yerleşik işlev İn_Array kullanmak değil mi? (http://www.php.net/in_array)

Başka bir dizenin alt dizenin ararken preg_match sadece çalışacaktır. (source)

preg_match bir dize girişi olmayan bir dizi bekliyor. Eğer anlatılan yöntemi kullanırsanız alırsınız:

Uyarı: preg_match () parametre 2 satır X YERİ verilen dize, dizi olmasını bekliyor

Sen in_array istiyorum:

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

Eğer birden fazla değer varsa, her değer separatly test edebilir ya da:

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
}

Ya da bir intersection dizeleri ve dizinin hem de yapabilirdi:

$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
}