Использование php для увеличения букв при циклическом переключении - PullRequest
0 голосов
/ 30 января 2011

Я работаю над проектом, в котором мне нужно перебирать буквы примерно так: a, A, b, B ... z, Z, aa, Aa, aA, AA, bb ... zz, ZZ. .. в PHP.

Возможно ли сделать это масштабируемым образом?

Ответы [ 5 ]

0 голосов
/ 30 января 2011

Конечно. Альфа-символы могут быть увеличены только с $a++. Для простоты, если нужен только набор одинарной или двойной длины, вы можете сделать ...

$single_set = array(); // array holding single-character sequence
$double_set = array(); // array holding double-character sequence

for ($v1 = 'a', $v2 = 'A'; $v1 !== 'aa'; $v1++, $v2++) {
    $single_set[] = $v1;
    $single_set[] = $v2;
    $double_set[] = $v1 . $v1;
    $double_set[] = $v1 . $v2;
    $double_set[] = $v2 . $v1;
    $double_set[] = $v2 . $v2;
    }

$set = $single_set + $double_set; // combined array sequence
0 голосов
/ 30 января 2011

Этот код записывает одну строку с элементами шириной 1 символ, затем шириной 2 символа и т. Д.

Для каждой ширины он печатает все перестановки, повторяя буквы и считая от 0 до 2 ^ widthи использование заглавных букв на основе двоичных битов.

e.g.
  00 = aa
  01 = aA
  10 = Aa
  11 = AA

(actually I have iterated bits from lowest to highest rank to get the order to match your example)

Код:

$maxwidth = 3;
for ( $width = 1; $width <= $maxwidth; $width++ ) {
    for ( $letter = ord('a'); $letter <= ord('z'); $letter++ ) {
        for ( $num = 0; $num < pow(2,$width); $num++ ) {
            for ( $bit = 0; $bit < $width; $bit++ ) {
                print ($num & pow(2, $bit)) ? strtoupper(chr($letter)) : chr($letter);  
            }
            print ','; 
        }
    }
    print "\n";
}

вывод:

a, A, b, B, c, C, d,D, E, E, F, F, G, G, H, H, I, I, J, J, K, K, L, L, M, M, N, N, O, O, P, P,q, Q, R, R, S, S, T, T, U, U, V, V, W, W, W, X, X, Y, Y, Z, Z, аа, аа, аа, аа, бб,Bb, Bb, ВВ, СС, Сс, сС, СС, дд, дд, дд, дД, й, Ee, еЕ, Е. Е., и далее, Ff, Ф.Ф., FF, GG, гг, Gg, Г.Г., чч, Hh,чЧ, HH, II, III, II, II, JJ, JJ, JJ, JJ, KK, кк, кк, К.К., LL, LL, Л.Л., LL, мм, мм, мм, мМ, пп, Nn, Nn,Н.Н., оо, оо, оо, оо, рр, Рр, ПП, ПП, кв.кв, QQ, QQ, QQ, р-р, Rr, Rr, RR, SS, Ss, Ss, СС, тт, тт, тт, ТТ,UU, UU, UU, UU, VV, VV, VV, VV, WW, WW, WW, WW, WW, XX, XX, XX, XX, YY, YY, YY, YY, ZZ, ZZ, ZZ, ZZ, ааа,Ааа, аАа, aaÃ, aaÃ, AaA, aaÃ, AAA, BBB, Bbb, ГЭБ, BBb, ГЭБ, ГЭБ, ГЭБ, В, ссс, ККА, ссс, ссс, ссс, ссс, ссс, CCC, ддд, Ddd,ддд, ддд, ддд, ддд, ддд, DDD, еее, Eee, EEE, EEE, EEE, EEE, EEE, ЕЕЕ, FFF, Fff, FFF, FFF, FFF, FFF, FFF, FFF, GGG, Ggg, GGG,GGG, GGG, GGG, GGG, ОГШ, HHH, Hhh, HHH, HHH, HHH, HhH, HHH, HHH, III, III, яII, III, III, III, III, III JJJ, Jjj, JJJ, JJJ, JJJ, JJJ, JJJ, JJJ, KKK, KKK, KKK, KKK, KKK, KKK, KKK, ККК, LLL, Lll, LLL,LLL, LLL, LLL, LLL, LLL, ттт, Мм, ттт, ттт, ттт, ттт, ттт, МММ, NNN, Nnn, NNN, NNN, NNN, NNN, NNN, NNN, ооо, ооо, ооо, ооо,ооо, ооо, ооо, ООО, ррр, PPP, PPP, PPP, PPP, PPP, PPP, PPP, QQQ, Qqq, QQQ, QQQ, QQQ, QQQ, QQQ, QQQ, ррр, RRR RRR, RRR RRR,RRR, RRR, РОП, SSS, SSS, SSS, SSS, SSS, SSS, SSS, СНО, ТТТ, Ttt, ТТТ, TTt, ТТТ, TtT, ТТТ, ТТТ, ууу, ууу, уУУ, уУУ, уУУ, уУУ,ууу, ууу, VVV, Vvv, VVV, VVV, VVV, VVV, VVV, VVV, WWW, Www, Www, Www, Www, WwW, WWW, WWW, ххх, ххх ххх ххх ххх ххх ххх,XXX, YYY, Yyy, ууу, ууу, ууу, ууу, ууу, YYY, ZZZ, Zzz, ZZZ, ZZZ, ZZZ, ZzZ, ZZZ, ZZZ,

0 голосов
/ 30 января 2011

Не уверен, что это то, что вы ищете?

$low = $low2 = range('a', 'z');
$upp = $upp2 = range('A', 'Z');

$arr = array();
foreach ($low as $val)
{
  $arr[] = $val;
  foreach ($low2 as $lval)
  {
    $arr[] = $val.$lval;
  }
}

foreach ($upp as $val)
{
  $arr[] = $val;
  foreach ($upp2 as $uval)
  {
    $arr[] = $val.$uval;
  }
}

foreach ($low as $val)
{
  foreach ($upp as $uval)
  {
    $arr[] = $val.$uval;
  }
}

foreach ($upp as $val)
{
  foreach ($low as $lval)
  {
    $arr[] = $val.$lval;
  }
}
0 голосов
/ 30 января 2011

$lowercase и $uppercase - это массивы, которые содержат значения ASCII для a-z и A-Z соответственно.

Изменить при необходимости.

<?php

    $lowercase = array(97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122);

    $uppercase = array(65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90);

    $i = 0;
    for($i; $i < 26; $i++) {
        echo chr($lowercase[$i]) . ", ";
        echo chr($uppercase[$i]) . ", ";
    }

    $i = 0;
    for($i; $i < 26; $i++) {
        echo chr($lowercase[$i]);
        echo chr($lowercase[$i]);
        echo ", ";
        echo chr($uppercase[$i]);
        echo chr($lowercase[$i]);
        echo ", ";
        echo chr($lowercase[$i]);
        echo chr($uppercase[$i]);
        echo ", ";
        echo chr($uppercase[$i]);
        echo chr($uppercase[$i]);
        echo ", ";
    }

?>

Вот как выглядит результат:

a, A, b, B, c, C, d, D, e, E, f, F, g, G, h, H, i, I, j, J, k, K, l, L, m, M, n, N, o, O, p, P, q, Q, r, R, s, S, t, T, u, U, v, V, w, W, x, X, y, Y, z, Z, aa, Aa, aA, AA, bb, Bb, bB, BB, cc, Cc, cC, CC, dd, Dd, dD, DD, ee, Ee, eE, EE, ff, Ff, fF, FF, gg, Gg, gG, GG, hh, Hh, hH, HH, ii, Ii, iI, II, jj, Jj, jJ, JJ, kk, Kk, kK, KK, ll, Ll, lL, LL, mm, Mm, mM, MM, nn, Nn, nN, NN, oo, Oo, oO, OO, pp, Pp, pP, PP, qq, Qq, qQ, QQ, rr, Rr, rR, RR, ss, Ss, sS, SS, tt, Tt, tT, TT, uu, Uu, uU, UU, vv, Vv, vV, VV, ww, Ww, wW, WW, xx, Xx, xX, XX, yy, Yy, yY, YY, zz, Zz, zZ, ZZ,
0 голосов
/ 30 января 2011

Расчет перестановок - довольно сложная задача. Это будет сделано специально для вашего случая вычисления двухсимвольных перестановок набора, содержащего все буквы в нижнем и верхнем регистре (я не проверял функцию, но вы должны быть в состоянии определить, что он делает, исправить любые ошибки, начни хотя бы).

function permutations($items)
{
  empty($items)?return array():$perms = array();
  for ($i = count($items)-1; $i > 0; --$i)
  {
    $perms[] = $items[0].$items[$i];
  }
  return array_merge($perms, permutations(array_slice($items,1)));
}
...