我想做一些像 -
A = 1
B = 2
...
...
Z = 26
AA = 27
AB = 28
AC = 29
我使用ASCII码转换器和范围功能来做到这一点。但是没有用。在这种情况下。
<?php
$range = range('AA','ZZ');
print_r($range);
?>
// Returns an array A to Z not AA to ZZ
那么,有没有可能的方法呢?
答案 0 :(得分:2)
您可以使用以下事实:使用++
递增字符串将在到达Z时回绕到AA,依此类推:
<?php
$result = [];
$string = 'A';
for ($i = 1; $i <= 26*27; $i++) {
$result[$string] = $i;
$string++;
}
=
Array
(
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
...
答案 1 :(得分:2)
这里通过使用范围通过数组索引为每个字母赋值[0,25]来起作用。然后添加一个额外的,你很好。缺点是,这对AZA这样的东西不起作用,但你说你只需要2个字母。
$string = 'ZZ';
$result = 0;
foreach (str_split(strtolower($string)) as $letter) {
$result += array_search($letter, range('a', 'z')) + 1;
}
print($result);
答案 2 :(得分:0)
您可以为所有字母指定一个值。然后将字符串转换为数组,以便数组中的每个值都是一个字母。然后遍历数组,并根据字母的值对所有数组元素求和。
答案 3 :(得分:0)
<?php
$test = "AA";
$ascval = array_map('ord', str_split($test));
var_dump(implode("", $ascval));
var_dump(array_sum($ascval));
<强>收率:强>
string(4) "6565"
int(130)
http://sandbox.onlinephpfunctions.com/code/ceb1fa2e8cb29c9f9dbf5e6c30db9878941e34ad