从给定的字母数组中增加字符串或从 PHP 的增量中排除特定字母

Increment string from given array of letters or exclude specific letters from incremental with PHP

我有一个允许的字母列表

$allowedLetters = array('B','C','D','F','G','H','J','K','L','M','N','P','R','S','T','V','W','X','Y','Z');

然后我想从该数组中进行字符串递增以获得以下模式:

BBB, BBC, BBD ... until ZZZ

我知道我可以像这样简单地进行字符串递增:

$letters = array();
$letter = 'BBB';
while ($letter !== 'ZZZ') {    
    $letters[] = $letter++;    
}

print_r($letters);

但它与我的允许字母列表不匹配,我只是找不到如何使用允许列表进行增量或只是排除我不想要的字母的方法,例如:

A,E,I,O,Q,U

还有什么可以更简单?如果有人能提供帮助,我将不胜感激。

我提出一个解决方案,从您涉及 strcspn() 函数的代码开始:

$letters = array();
$letter = 'BBB';
while ($letter !== 'ZZZ') {
    $letter++;  
    if(strcspn($letter, "AEIOU") == 3 )       
        $letters[] = $letter;    
}

print_r($letters);

提到的函数return是needle参数中列出的字符第一次出现的索引。因此,在我们的例子中,如果存在任何字符,它将 return 范围内的值 [0-2] 。根据手册页,没有找到 needle 列表中指定的字符,原始字符串的长度为 returned(在我们的场景中它始终等于 3)。

这意味着确保 returns 3 我们只接受不包含禁止字符 "AEIOU" 的字符串,并将它们附加到我们的输出数组。