nicht sehr effizient, aber erhält die Arbeit erledigt:
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
Dies funktioniert, weil, wenn Sie so etwas wie $char = 'A'
bekommen und tun $char++
, wird es auf ‚B‘ ändern, dann ‚C‘ , 'D', ... 'Z', 'AA', 'AB' und so weiter.
Beachten Sie, dass dies umso langsamer wird, je länger $end
ist. Ich würde dies nicht für etwas anderes als 'ZZZZ' (475254 Iterationen) empfehlen oder wenn Sie so viele Lookups benötigen.
$string = strtolower($string);
$result = 0;
$length = strlen($string);
foreach($string as $key=>$value){
$result = ($length -$key - 1)*(ord($value)-ord(a)+1);
}
und Ergebnis enthalten würde, was Sie wollen:
Eine Alternative mit besserer Leistung
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
Ist dies eine benutzerdefinierte Bestellung? Hast du eine Tabelle mit allen möglichen Werten? – Deleteman
Möchten Sie Werte für "AAA", "AAHJSNDJS" usw. zurückgeben? –
Was soll 'BA' zurückgeben? – h2ooooooo