2017-05-11 6 views
0

특정 문자 집합과 문자 집합이있는 배열의 요소 만 찾아야합니다.PHP에서 특정 문자 집합 만 포함하는 배열 요소 찾기

나는 다음과 같은 배열을 가지고 :

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

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

내가 전에 또는 (어느 한쪽이 아닌 양쪽) 경기 단어 후 'e,n,t' 문자와 단일 또는 이중 성격을 가지고있는 $sample 배열의 값을 찾을 필요 . I는, 패턴 E, N, t 및 이전에 또는 (어느 한쪽이 아닌 양측) 후 1 개 문자로 검색하는 경우는, 결과

array("sten", "enet") 

되며 I 패턴 E, N, t 및 2 검색하면 전이나 (어느 한쪽이 아닌 양쪽) 후 편지는, 결과가 될 것입니다

array("netff", "denet") 

내가 preg_grep()와 정규식을 시도했지만 작동하지 않습니다

한 편지를 전이나 (양쪽 후, 양쪽이 아님) :

0 1,239,688,

이 편지 전후 (면, 둘 양쪽) : 나는 당신이되고 이미 미리 필터링 된 모든 문자열이 있다고 가정 하겠어

$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