【问题标题】:Find element of an array those contains only specific character set in PHP查找仅包含 PHP 中特定字符集的数组元素
【发布时间】:2017-10-10 12:05:45
【问题描述】:

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

我有这样的数组:

$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);

【问题讨论】:

    标签: php arrays substring filtering


    【解决方案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',
    )
    

    【讨论】:

    • @VaswatiPal 您的问题似乎尚未解决。我离解决你的问题有多近?我需要调整答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2017-04-27
    • 2019-02-06
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多