2017-05-11 12 views
0

特定の文字セットとその前後の任意の文字を持つ配列の要素のみを検索する必要があります。PHPの特定の文字セットのみを含む配列の要素を見つける

私はこれらのような配列を持っている:

$sample = array("sten", "netff", "enet", "denet"); 

$value = array('e', 'n', 't'); 

私が前か後'e,n,t'文字と単一または二重の性格を持っている$sample配列(どちらの側ではなく、両方の側)からの値に一致する単語を見つける必要があります。私はパターンe、N、Tおよび前または(いずれかの側ではなく、両方の側)の後1つの文字で検索する場合には、結果は

array("sten", "enet") 

なり、Iはパターンe、N、T及び2で検索した場合手紙それ(どちらの側ではなく、両方の側)の前または後に、結果が

array("netff", "denet") 

になりますが、私はpreg_grep()で正規表現を試みたが、それは動作しません。(どちらかの側の前または後に

1文字を、両側ではない):

0 (どちらかの側ではなく、両方の側)の前または後に

2手紙:

$result = preg_grep("/^(?:.{2}".$value."|".$value.".{2})$/", $sample); 

答えて

1

私はすでに、すべての文字列が4つのまたは5文字であることを事前にフィルタ処理していると仮定するつもりです - 場合そうでなければ、私の最初のフィルタ関数のコメントを外すことができます。

入力:

$findgroup=['eaten','enter','tend','sten','neat','dents','enet','netty','teeth','denet','teen','spent']; 
$values=['e','n','t']; 

方法:

//$findgroup=array_filter($findgroup,function($v){return strlen($v)==4 || strlen($v)==5;}); 
$findgroup=array_filter($findgroup,function($v)use($values){ 
    return 
     sizeof(array_intersect(array_unique(str_split(substr($v,0,3))),$values))==3 || 
     sizeof(array_intersect(array_unique(str_split(substr($v,-3))),$values))==3; 
}); 
var_export($findgroup);  
// omitted: neat, dents, teeth, teen 

出力:

array (
    0 => 'eaten', 
    1 => 'enter', 
    2 => 'tend', 
    3 => 'sten', 
    6 => 'enet', 
    7 => 'netty', 
    9 => 'denet', 
    11 => 'spent', 
) 
+0

あなたの質問が未解決であるように思わ@VaswatiPal。あなたの質問を解決するのにどれくらい近づいたのですか?私は自分の答えを調整する必要がありますか? – mickmackusa

関連する問題