Ben (needle
) dizelerden oluşan bir dizi alır ve dizeleri başka bir dizi karşı bir karşılaştırma gerçekleştirir PHP bir fonksiyon yazmaya çalışıyorum (haystack
). Bu fonksiyonun amacı hızlı bir AJAX arama dizelerini eşleşen teslim etmektir, bu nedenle mümkün olduğunca hızlı olması gerekir.
İşte iki diziyi göstermek için bazı örnek kod;
$needle = array('ba','hot','resta');
$haystack = array(
'Southern Hotel',
'Grange Restaurant & Hotel',
'Austral Hotel',
'Barsmith Hotel',
'Errestas'
);
Bu kendi içinde oldukça kolay iken, karşılaştırma amacı haystack
görünen kaç needle
dizeleri saymak etmektir.
Ancak, üç kısıtlamalar vardır;
- Karşılaştırma harf duyarsız
- The
needle
must only match characters at the beginning of the word. For example, "hote" will match "Hotel", but "resta" will not match "Errestas". - Biz eşleştirme
needles
sayısını değil,needle
maçta sayı saymak istiyorum. Bir yer "Otel Hotel" adlı, biz olması sonucu gerek1
değil3
.
Yukarıdaki örneği kullanarak, biz bir sonucu olarak şu ilişkisel dizi beklersiniz:
$haystack = array(
'Southern Hotel' => 1,
'Grange Restaurant & Hotel' => 2,
'Austral Hotel' => 1,
'Barsmith Hotel' => 2,
'Erresta' => 0
);
Ben bir preg_match_all()
kullanarak, bunu yapmak için bir fonksiyonu uygulamak için çalışıyor ve /(\A|\s)(ba|hot|resta)/
gibi görünen bir sıradanifade oldum. Bu sadece kelimelerin başında maç sağlar iken, iki kez aynı needle
içeren hesap dizeleri içine almaz.
Ben başkası bir çözüm olup olmadığını görmek için ilanıyla?