效率不高,但能够完成任务:
function get_character_number($end)
{
$count = 1;
$char = 'A';
$end = strtoupper($end);
while ($char !== $end) {
$count++;
$char++;
}
return $count;
}
echo get_character_number('AA'); // 27
demo
这工作,因为当你有像$char = 'A'
做$char++
,它会变成“B”,然后“C” ,'D',...'Z','AA','AB'等。
请注意,这会变得越慢,$end
就越长。除了'ZZZZ'(475254迭代)之外,我不会推荐这么做,或者你需要很多查找。
一种性能更好的替代方法是
function get_character_number($string) {
$number = 0;
$string = strtoupper($string);
$dictionary = array_combine(range('A', 'Z'), range(1, 26));
for ($pos = 0; isset($string[$pos]); $pos++) {
$number += $dictionary[$string[$pos]] + $pos * 26 - $pos;
}
return $number;
}
echo get_character_number(''), PHP_EOL; // 0
echo get_character_number('Z'), PHP_EOL; // 26
echo get_character_number('AA'), PHP_EOL; // 27
demo
这是自定义订单吗?你有一张桌子有所有可能的价值吗? – Deleteman
你想让它返回“AAA”,“AAHJSNDJS”等的值吗? –
'BA'应该返回什么? – h2ooooooo