我需要在“字母”计数系统中转换号码,类似于Excel电子表格:
convert(1)==“A”;
convert(2)==“B”;
...
convert(26)==“Z”;
convert(27)==“AA”;
...
convert(52)==“AZ”;
convert(53)==“BA”;
...
convert(702)==“ZZ”;
convert(703)==“AAA”;
这是我的代码:
function convert($n){
if ($n> 26) {
$tmp = floor($n / 26);
$n= $n % 26;
$result = chr(($tmp - 1) + 65) . chr(($n - 1) + 65);
} else {
$result = chr(($n- 1) + 65);
}
return $result;
}
但输出有点偏:
@,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,
B @,BA
我试图调整数字,但我无法做到正确,有什么建议可以提供更好的算法吗?
答案 0 :(得分:2)
利用PHP增加字符串和数字的能力:
function convert($number) {
$result = 'A';
for($i = 1; $i < $number; ++$i) {
++$result;
}
return $result;
}
答案 1 :(得分:2)
基于@NiettheDarkAbsol评论, 如果预期的呼叫是针对小数字的话,这是一个快速的解决方案:
function convert($n) {
for($out = 'A'; --$n > 0; $out++);
return $out;
}
来自docs
PHP在处理字符变量而不是C的算术运算时遵循Perl的约定。例如,在PHP和Perl $ a =&#39; Z&#39 ;; $ A ++;将$ a变成'AA&#39;,而在C a =&#39; Z&#39 ;;一个++;变成了&#39; [&#39; (ASCII值为&#39; Z&#39;为90,ASCII值为&#39; [&#39;为91)。请注意,字符变量可以递增但不递减,即使只支持纯ASCII字母和数字(a-z,A-Z和0-9)。递增/递减其他字符变量无效,原始字符串不变。
答案 2 :(得分:0)
您可以尝试这样的事情
<div class="page">
<div class="container">
<div class="row">
<div class="event">Event 1</div>
<div class="event">Event 2</div>
<div class="event">Event 3</div>
<div class="event">Event 4</div>
<div class="event">Event 5</div>
<div class="event">Event 6</div>
</div>
<div class="row">
<div class="event">Event 1</div>
<div class="event">Event 1</div>
<div class="event">Event 1</div>
</div>
<div class="row">
<div class="event">Event 1</div>
</div>
<div class="row">
<div class="event">Event 1</div>
</div>
</div>
</div>
每个循环中的键都是function convert($n)
{
if ($n <= 0) return "";
$r = "";
$c = "abcdefghijklmnopqrstuvwxyz";
do {
$n -= 1;
$r = $c[$n % 26] . $r;
$n = intval($n / 26);
} while($n > 0);
return strtoupper($r);
}
var_dump(convert(703)); // AAA
var_dump(convert(52)); // AZ
,因为您使用的数字系统没有零(0)的概念。