[英]Find element of an array those contains only specific character set in PHP
我只需要查找具有一組特定字母以及該字母之前或之后的任何字符的數組元素。
我有這樣的數組:
$sample = array("sten", "netff", "enet", "denet");
$value = array('e', 'n', 't');
我需要從$sample
數組中找到具有'e,n,t'
字符以及匹配詞之前或之后(任一側,而不是兩側)的單字符或雙字符的值。 如果我在模式e,n,t和前1個字母或后1個字母(任一側,而不是兩側)搜索時,結果將是
array("sten", "enet")
如果我在模式e,n,t和2字母之前或之后(任一側,而不是兩側)搜索,結果將是
array("netff", "denet")
我用preg_grep()
嘗試了正則表達式,但是不起作用:
前后各1個字母(任意一方,而不是雙方):
$result = preg_grep("/^(?:.{1}".$value."|".$value.".{1})$/", $sample);
前后兩個字母(任意一方,而不是雙方):
$result = preg_grep("/^(?:.{2}".$value."|".$value.".{2})$/", $sample);
我將假定您已經將所有字符串預先過濾為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',
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.