私は次のような文字を循環させる必要があるプロジェクトに取り組んでいます:a、a、b、b ... z、z、aa、Aa、aA、AA 、bb ... zz、ZZ ... PHPで。capililisationを通してサイクリング中にphpを使って文字を増やす
スケーラブルな方法でこれを行うことはできますか?
私は次のような文字を循環させる必要があるプロジェクトに取り組んでいます:a、a、b、b ... z、z、aa、Aa、aA、AA 、bb ... zz、ZZ ... PHPで。capililisationを通してサイクリング中にphpを使って文字を増やす
スケーラブルな方法でこれを行うことはできますか?
これはあなたが探しているものですか?
$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;
}
}
並べ替えの計算はかなり重い作業です。これは、あなたのケースでは、すべての大文字と小文字を含むセットの2つの文字順列を計算する場合に特に役に立ちます(私は関数をテストしていませんが、何らかのエラーを修正していることを理解できるはずです。あなたは少なくとも始動させてください)。
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)));
}
$lowercase
と$uppercase
は、Zは、それぞれA-Z、のASCII値を保持する配列です。
必要に応じて変更してください。
<?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,
このコードは次いで、1 2を有する文字広い、1つのチャー広い要素と一列を書き込む、等
各幅について、文字を反復して0から2 ^幅までカウントし、バイナリビットに基づいて大文字にすることによって、すべての順列を出力します。
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、B、B、C、C、D、D、E、E、F、F、G、G P、q、Q、r、R、s、S、tのうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。 A、A、A、B、B、B、B、C、C、C、C、C、C、D、E、 FF、gg、Gg、gG、GG、hh、Hh、hH、HH、ii、Ii、II、II、 MM、MM、NM、NN、NN、OO、OO、OO、OO、PP、およびそれらの組み合わせからなる群より選択される、 Q、Q、r、Rr、rR、RR、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 aaa、aaa、aaA、aAA、AAA、bbb、Bbb、bBb、BBb、bbB、BbB、bBB、BBB、ccc、Ccc、Cc、Cc、 DDD、DDD、DDD、DDD、DDD、DDD、EEE、EEE、EEe、EEe、EeE、EeE、EEE、EEE、fff、Fff、fFf、fcf、fcf、 FFFF、FFFF、FFF、FFF、GGG、GGG、GGG、GGG、GGG、HGH、HHH、 KIK、KKK、KKK、KKK、KKK、III、LII、IIL、IIL、IIL、IIL、IIL、IIL、 MMN、MMM、NMN、NMN、NMN、NNn、NnN、NnN、NNN、NNN、Ooo、Ooo、OOo、OOo、OoO、OoO、 QPQ、QPQ、QQQ、QQQ、QQQ、QQQ、QQQ、rrr、Rrr、rRr、RRr、rrR、RrR、rRR、 URU、UUU、UUU、UUU、UUU、UUU、UUU、UUU、UTU、UTU、 www、www、www、www、xxx、xxx、xxx、XXx、xxx、xxx、xxx、xxx、yyy、 YYY、YYY、YYY、YYY、YYY、YYY、ZZZ、ZZZ、ZZZ、ZZZ、ZZZ、ZZZ、zZZ、ZZZ、
確かに。アルファ文字は、$a++
で増分できます。簡単にするために、単数または2文字の長さのセットが必要な場合は、次の操作を行うことができます。
$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