簡體   English   中英

查找僅包含PHP中特定字符集的數組元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM