Dizelerden oluşan bir dizi içinde arama

1 Cevap php

Tamam, ben, burada zekalı hissediyorum

Ben şöyle bir dize var:

$string = 'function module_testing() {';

ya da bu gibi olabilir:

$string = 'function module_testing()';

ya da bu gibi olabilir:

$string = 'function module_testing($params) {';

ya da bu:

$string = 'function module_testing($params, $another = array())';

ve daha birçok yolu ...

Ve ben bu yüzden gibi dizeleri bir dizi var daha:

$string_array = array('module_testing', 'another_function', 'and_another_function');

Şimdi, bir çeşit preg_match I $string_array değerlerinden herhangi herhangi bir pozisyonda $string dize içinde bulunan sınamak için bunu yapabilirsiniz var? Yani bu durumda, bir maç olurdu. Veya bunu yapmak için daha iyi bir yolu var mı?

Tam bir eşleşme değil çünkü ben in_array kullanamazsınız, ve ben o yardımcı olabilir eğer bir {[zaten beri ben oldukça, bunun üzerine bir foreach döngü yapmak istemiyorum (2)]} döngü.

Teşekkürler :)

1 Cevap

Burada A foreach döngü uygun çözümdür. Bu en okunabilir ama üç değerler üzerinde döngü konum değil. Bir while döngü içinde olur aslında olmayan bir konudur.

foreach ($string_array as $v) {
  if (strpos($string, $v) !== false) {
    // found
  }
}

Sen alternatif bir düzenli ifadeyi kullanabilirsiniz:

$search = '\Q' . implode('\E|\Q', $string_array) . '\E';
if (preg_match('!$search!`, $string)) {
  // found
}

Bu iki bölümü vardır. Öncelikle, | sözdizimi vardır:

a|b|c

bulmak anlamına gelir a, b ya da c. Ikinci bölüm:

\Q...\E

ki içeriğini kaçar. Arama dizeleri herhangi bir düzenli ifade özel karakter (örneğin, () ardından regex düzgün çalışmaya devam eder içeriyorsa bu demektir.

Ben bu foreach döngü daha hızlı olarak göremiyorum sonuçta olsa.