查找数组中仅包含PHP中特定字符集的元素

时间:2017-05-11 13:00:58

标签: php arrays substring filtering

我只需要找到一组数字的元素,这些元素在这组字母之前或之后都有一组特定的字母和任何字符。

我有这样的数组:

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

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

我需要找到$sample数组中具有'e,n,t'个字符的值以及匹配字之前或之后(任一方,不是双方)的单字符或双字符的值。如果我在模式e,n,t和1个字母之前或之后(任何一边,而不是两边)搜索它,结果将是

array("sten", "enet") 

如果我在模式e,n,t和2字母之前或之后(任一方,而不是两边)搜索它,结果将是

array("netff", "denet")

我使用preg_grep()尝试了正则表达式,但它不起作用:

之前或之后的1个字母(任何一方,不是双方):

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

之前或之后的2个字母(任何一方,不是双方):

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

1 个答案:

答案 0 :(得分: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',
)