2017-09-07 138 views
2
$letter = array(); 
for ($i = 'A'; $i !== 'ZZ'; $i++){ 
     $letter[] .= $i; 
} 
print_r($letter); 

从上面的脚本我做一个循环从ABCD ... ZZ如何每次迭代将字母增加N次并存储在数组中?

现在,我希望把它作为ACEGI ... ZZ。 (步骤代替)

我需要方向去做。

+2

*从A,B,C,d循环到ZZ *时'ZZ'会到来。 –

+0

我想说一个奇数字母的数组,如1是A 3是C等。 –

+0

尝试我++两次而不是一次 –

回答

1

ord()将不起作用,因为您的结束字符串是两个字符长。

返回字符串的第一个字符的ASCII值

Watch it break

从我的测试中,您需要检查end字符串没有被“超越”。 perl样式字符增量是一种很酷的方法,但它是一种单步方法。出于这个原因,内部循环在必要时帮助它。这实际上并不麻烦,事实上,它很有用,因为我们需要检查是否应在每一步中断开循环。

代码:(Demo

function excelCols($letter,$end,$step=1){ // function doesn't check that $end is "later" than $letter 
    if($step==0)return []; // prevent infinite loop 
    do{ 
     $letters[]=$letter; // store letter 
     for($x=0; $x<$step; ++$x){ // increment in accordance with $step declaration 
      if($letter===$end)break(2); // break if end is "stepped on" 
      ++$letter; 
     } 
    }while(true); 
    return $letters;  
} 
echo implode(' ',excelCols('A','JJ',4)); 
echo "\n --- \n"; 
echo implode(' ',excelCols('A','BB',3)); 
echo "\n --- \n"; 
echo implode(' ',excelCols('A','ZZ',1)); 
echo "\n --- \n"; 
echo implode(' ',excelCols('A','ZZ',3)); 

输出:

A E I M Q U Y AC AG AK AO AS AW BA BE BI BM BQ BU BY CC CG CK CO CS CW DA DE DI DM DQ DU DY EC EG EK EO ES EW FA FE FI FM FQ FU FY GC GG GK GO GS GW HA HE HI HM HQ HU HY IC IG IK IO IS IW JA JE JI 
--- 
A D G J M P S V Y AB AE AH AK AN AQ AT AW AZ 
--- 
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV CW CX CY CZ DA DB DC DD DE DF DG DH DI DJ DK DL DM DN DO DP DQ DR DS DT DU DV DW DX DY DZ EA EB EC ED EE EF EG EH EI EJ EK EL EM EN EO EP EQ ER ES ET EU EV EW EX EY EZ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ GA GB GC GD GE GF GG GH GI GJ GK GL GM GN GO GP GQ GR GS GT GU GV GW GX GY GZ HA HB HC HD HE HF HG HH HI HJ HK HL HM HN HO HP HQ HR HS HT HU HV HW HX HY HZ IA IB IC ID IE IF IG IH II IJ IK IL IM IN IO IP IQ IR IS IT IU IV IW IX IY IZ JA JB JC JD JE JF JG JH JI JJ JK JL JM JN JO JP JQ JR JS JT JU JV JW JX JY JZ KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KO KP KQ KR KS KT KU KV KW KX KY KZ LA LB LC LD LE LF LG LH LI LJ LK LL LM LN LO LP LQ LR LS LT LU LV LW LX LY LZ MA MB MC MD ME MF MG MH MI MJ MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NB NC ND NE NF NG NH NI NJ NK NL NM NN NO NP NQ NR NS NT NU NV NW NX NY NZ OA OB OC OD OE OF OG OH OI OJ OK OL OM ON OO OP OQ OR OS OT OU OV OW OX OY OZ PA PB PC PD PE PF PG PH PI PJ PK PL PM PN PO PP PQ PR PS PT PU PV PW PX PY PZ QA QB QC QD QE QF QG QH QI QJ QK QL QM QN QO QP QQ QR QS QT QU QV QW QX QY QZ RA RB RC RD RE RF RG RH RI RJ RK RL RM RN RO RP RQ RR RS RT RU RV RW RX RY RZ SA SB SC SD SE SF SG SH SI SJ SK SL SM SN SO SP SQ SR SS ST SU SV SW SX SY SZ TA TB TC TD TE TF TG TH TI TJ TK TL TM TN TO TP TQ TR TS TT TU TV TW TX TY TZ UA UB UC UD UE UF UG UH UI UJ UK UL UM UN UO UP UQ UR US UT UU UV UW UX UY UZ VA VB VC VD VE VF VG VH VI VJ VK VL VM VN VO VP VQ VR VS VT VU VV VW VX VY VZ WA WB WC WD WE WF WG WH WI WJ WK WL WM WN WO WP WQ WR WS WT WU WV WW WX WY WZ XA XB XC XD XE XF XG XH XI XJ XK XL XM XN XO XP XQ XR XS XT XU XV XW XX XY XZ YA YB YC YD YE YF YG YH YI YJ YK YL YM YN YO YP YQ YR YS YT YU YV YW YX YY YZ ZA ZB ZC ZD ZE ZF ZG ZH ZI ZJ ZK ZL ZM ZN ZO ZP ZQ ZR ZS ZT ZU ZV ZW ZX ZY ZZ 
--- 
A D G J M P S V Y AB AE AH AK AN AQ AT AW AZ BC BF BI BL BO BR BU BX CA CD CG CJ CM CP CS CV CY DB DE DH DK DN DQ DT DW DZ EC EF EI EL EO ER EU EX FA FD FG FJ FM FP FS FV FY GB GE GH GK GN GQ GT GW GZ HC HF HI HL HO HR HU HX IA ID IG IJ IM IP IS IV IY JB JE JH JK JN JQ JT JW JZ KC KF KI KL KO KR KU KX LA LD LG LJ LM LP LS LV LY MB ME MH MK MN MQ MT MW MZ NC NF NI NL NO NR NU NX OA OD OG OJ OM OP OS OV OY PB PE PH PK PN PQ PT PW PZ QC QF QI QL QO QR QU QX RA RD RG RJ RM RP RS RV RY SB SE SH SK SN SQ ST SW SZ TC TF TI TL TO TR TU TX UA UD UG UJ UM UP US UV UY VB VE VH VK VN VQ VT VW VZ WC WF WI WL WO WR WU WX XA XD XG XJ XM XP XS XV XY YB YE YH YK YN YQ YT YW YZ ZC ZF ZI ZL ZO ZR ZU ZX 

下面是一个阵列的功能的方法:

代码:(Demo

$start='C'; 
$end='DD'; 
$step=4; 

// generate and store more than we need (this is an obvious method disadvantage) 
$result=$array=range('A','Z',1); // store A - Z as $array and $result 
foreach($array as $a){ 
    foreach($array as $b){ 
     $result[]="$a$b"; // store double letter combinations 
     if(in_array($end,$result)){break(2);} // stop asap 
    } 
} 
//echo implode(' ',$result),"\n\n"; 

// slice away from the front of the array 
$result=array_slice($result,array_search($start,$result)); // reindex keys 
//echo implode(' ',$result),"\n\n"; 

// punch out elements that are not "stepped on" 
$result=array_filter($result,function($k)use($step){return $k%$step==0;},ARRAY_FILTER_USE_KEY); // use modulo 

// result is ready 
echo implode(' ',$result); 

输出:

C G K O S W AA AE AI AM AQ AU AY BC BG BK BO BS BW CA CE CI CM CQ CU CY DC 
+0

哇这是非常有用的代码。仅供参考,它至少需要PHP 5.4 –

3

这是你的问题的解决,

$letter = array(); 
for ($i = 'A'; $i !== 'ZZ'; $i++){ 
     if(ord($i) % 2 != 0) 
      $letter[] .= $i; 
} 
print_r($letter); 

您需要获得该字符,这将解决你的问题的ASCII值。

这是ord文档和工作code

为了您的需求,你可以这样做,

for ($i = 'A'; $i !== 'ZZ'; ord($i)+$x){ 
    $letter[] .= $i; 
} 
print_r($letter); 

这里设置$ X按您的要求。

+0

谢谢,但它只适用于A,C,E ..我们可以使它尽可能动态吗?这样的3个步骤,5个步骤,x个步骤?谢谢 –

+0

你的工作代码不起作用。 ord()不能以你使用它的方式使用。 – mickmackusa

相关问题