php değişkenler soru

5 Cevap

Bu çeşit veya aşağıda görevi tamamlamak olabilecek kod bazı başka tür bir reg ifade ile bir değişken oluşturmak mümkün mü?

For instance, the data in var test = parta but could also be equal to partm. Note i don't want an array...

Ben bir sql arama bu kullanıyorum, ama ben farklı model ve seri 1000'ler ve sadece girişine benzer dizi dönmeden modellerinin bazı dizi dönmek istiyor ...

O beşinci karakter İstediğiniz karakterleri bir liste olmasını sağlayacak bir şey ... var mı?

Another example i have model

Aynı seride iki model

515-n

515m

model in different series 1515

Im 515 serisi arama eğer 1515 dönmek istemiyorum ...

Bu ... tek kombinasyon değil yani arama sadece bu bir tarif edilemez unutmayın ... jenerik sonucu olması gerekir.

5 Cevap

Normalde veritabanında bilgi bulmak için SQL LIKE sözdizimi kullanırsınız. Ben PHP kullanmak istiyorum emin değilim. Eğer 515 ile başlayan tüm modeller aramak istiyorsanız sizin gibi bir şey kullanmak istiyorsunuz:

SELECT * FROM `models` WHERE model_name LIKE '515%';

Oranı sadece sağ tarafta böylece bu 1515 bulmak değil dikkat edin.

preg_match('/\b515\b-?(?:n|m)/', $model)

Generically:

preg_match('/\b' . $model_number . '\b-?(?:' . join('|', $array_of_series_letters) . ')/', $model)

Bazı desenleri maç SQL joker karakterleri kullanabilirsiniz, ancak bu düzenli ifadeler gibi esnek yaklaşamaz. Burada mevcut joker kurallar şunlardır:

%    A substitute for zero or more characters

_    A substitute for exactly one character

[charlist]   Any single character in charlist

[^charlist]
or
[!charlist]  Any single character not in charlist

Sizin örnekte, sizin SQL fıkra içinde aşağıdakilerden herhangi birini kullanabilirsiniz:

WHERE model LIKE '515%' <--matches 515 followed by zero or more characters

WHERE model LIKE '515-[nm]' <--matches 515-n and 515-m only

WHERE model LIKE '515%[nm]' <--matches 515n and 515-m, also would match 515Qm

Ben bu (neredeyse) gerçek dünya çözüm için yeterli bağışlayıcı olduğunu düşünüyorum:

function isModel($prefix,$input)
{
    return preg_match("/^" . $prefix . "\s*-?\s*?[nm]/", $input);
}

Bazı test durumlarda:

isModel('5155', '5155n'); // "1"
isModel('515','515-n'); // "1"
isModel('789','789 - m'); // "1"
isModel('111','111    -n'); // "1"

Ben her zaman eğer düzenli ifadeler kaçınarak öneririz. Bu durumda bu model bir model ve geçerli uzantıları var, kolayca mümkündür. Sou yalnızca dize istenen model-string ile başlar ve geçerli uzantıları birinin üzerine sona olmadığını kontrol etmek gerekir:

$string = '515-n';
$possibleExtensions = array('-n', 'm');
$model = '515';
$isDesiredModel = strpos($string, $model) === 0 &&
    in_array(substr($string, strlen($model)), $possibleExtensions);