Увеличить строку из заданного массива букв или исключить указанные c буквы из инкрементального с помощью PHP - PullRequest
1 голос
/ 26 мая 2020

У меня есть список разрешенных букв

$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

Что может быть проще? Буду признателен, если бы кто-нибудь мог помочь.

1 Ответ

1 голос
/ 26 мая 2020

Я предлагаю решение, исходя из вашего кода, которое включает strcspn() функцию:

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

print_r($letters);

Указанная функция возвращает индекс первого вхождения символов, перечисленных в needle параметр. Итак, в нашем случае он вернет значение в диапазоне [0-2], если присутствует какой-либо из символов. Согласно странице руководства, ни один из символов, указанных в списке needle, не найден, возвращается длина исходной строки (в нашем сценарии она всегда равна 3).

Это означает, что выполнение убедившись, что он возвращает 3, мы принимаем только строки, которые не содержат запрещенных символов "AEIOU", добавляя их в наш выходной массив.

...