Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找在PHP中仅包含特定字符集的数组元素_Php_Arrays_Substring_Filtering - Fatal编程技术网

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

查找在PHP中仅包含特定字符集的数组元素,php,arrays,substring,filtering,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")

我只需要找到数组中具有特定字母集的元素以及字母集前后的任何字符

我有如下数组:

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

$value = array('e', 'n', 't');
我需要从
$sample
数组中查找值,这些值在匹配字之前或之后有
'e,n,t'
字符和单字符或双字符(任一侧,而不是两侧)。如果我使用模式e、n、t和1个字母在它之前或之后(任一侧,而不是两侧)进行搜索,结果将是

array("sten", "enet") 
array("netff", "denet")
如果我用模式e,n,t和2个字母在它之前或之后搜索(任一侧,而不是两侧),结果将是

array("sten", "enet") 
array("netff", "denet")
我用
preg\u grep()
尝试了regex,但它不起作用:

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',
)

@瓦斯瓦蒂帕尔:你的问题似乎没有解决。我离解决你的问题有多远?我需要调整我的答案吗?