Алфавиты в виде строк ... как? - PullRequest
0 голосов
/ 01 июня 2019

Я давно искал и искал, но не могу найти в PHP никакого способа получить строку типа " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ", сказав ему язык ввода или локаль (не уверен что актуально ... может и то и другое).На самом деле, я даже не могу найти список не-PHP этих онлайн нигде.За исключением США.

Должен ли я сам разобраться в этом и затем создать свои собственные строки, или это каким-то образом встроено в язык и готово для меня, чтобы "схватить"?

1 Ответ

0 голосов
/ 01 июня 2019

Если вы знаете первую и последнюю букву вашего алфавита, можно использовать комбинацию функций mb_strtolower и mb_range, которую я нашел здесь: GitHub rodneyrehm

$low_letters = mb_range('α', 'ω');
$upper_letters = array_map('mb_strtoupper', $low_letters);

echo implode('', array_merge($low_letters, $upper_letters)); // αβγδεζηθικλμνξοπρςστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΣΤΥΦΧΨΩ

И код функции mb_range (в случае исчезновения GitHub):

 mb_internal_encoding('UTF-8');
/**
 * multibyte string compatible range('A', 'Z')
 *
 * @param string $start Character to start from (included)
 * @param string $end Character to end with (included)
 * @return array list of characters in unicode alphabet from $start to $end
 * @author Rodney Rehm
 */
function mb_range($start, $end) {
    // if start and end are the same, well, there's nothing to do
    if ($start == $end) {
        return array($start);
    }

    $_result = array();
    // get unicodes of start and end
    list(, $_start, $_end) = unpack("N*", mb_convert_encoding($start . $end, "UTF-32BE", "UTF-8"));
    // determine movement direction
    $_offset = $_start < $_end ? 1 : -1;
    $_current = $_start;
    while ($_current != $_end) {
        $_result[] = mb_convert_encoding(pack("N*", $_current), "UTF-8", "UTF-32BE");
        $_current += $_offset;
    }
    $_result[] = $end;
    return $_result;
}
...