Php 为什么';按预期工作

Php 为什么';按预期工作,php,Php,在将mysql数据导出到excel的过程中,我遇到了错误问题。 我必须变量$rowNumber和$col。我必须同时减少ti(-1)。 附加的代码适用于$rowNumber,但不适用于$col。你知道吗 结果总是: 182 AD 183 AE 正如您所看到的,increase对这两者都有效 <?php $rowNumber = '183'; $col = 'AD'; $rowNumber--; $col--; echo $rowNumber,' ' , $col, "\n";

在将mysql数据导出到excel的过程中,我遇到了错误问题。 我必须变量$rowNumber和$col。我必须同时减少ti(-1)。 附加的代码适用于$rowNumber,但不适用于$col。你知道吗

结果总是:

 182 AD
 183 AE
正如您所看到的,increase对这两者都有效

<?php

$rowNumber = '183';
$col = 'AD';

$rowNumber--;
$col--;

echo $rowNumber,' ' , $col, "\n";

$rowNumber++;
$col++;

echo $rowNumber,' ' , $col, "\n";

?>

您需要将它们视为数字,并将数字提取到列中,因为我已经编写了一个方法
getNameFromNumber
您可以看到它符合您的期望

<?php

$rowNumber = 183;
$col = 29;//'AD';

function getNameFromNumber($num) {
    $letter = chr(65 + $num % 26);
    $num2 = intval($num / 26);
    return ($num2 > 0) ? getNameFromNumber($num2 - 1) . $letter : $letter;
}


$rowNumber--;
$col--;

echo $rowNumber,' ' , getNameFromNumber($col), "\n";

$rowNumber++;
$col++;

echo $rowNumber,' ' , getNameFromNumber($col), "\n";

?>

在PHP中只能递增字符串,而不是递减可能与您的情况最相关。例如,如果列是
AQ
,该怎么办?更新我的代码使用
getNameFromNumber
对于itI,请参见“AQ”将不起作用,但在我的情况下,“AC”将是有史以来最高的collumn。所以这个解决方案适合我的需要。可能现在是这样,但是当其他人出现并试图修改你的代码时会发生什么呢?@NigelRen更新的代码适用于我测试的所有情况,最多10000 cols
182 AC
183 AD