मैं एक स्क्रिप्ट पर काम कर रहा हूं जो कुछ एक्सेल दस्तावेज़ों को उत्पन्न करता है और मुझे एक संख्या को इसके स्तंभ नाम के समकक्ष बदलने की आवश्यकता है। उदाहरण के लिए:
1 => A
2 => B
27 => AA
28 => AB
14558 => UMX
मैंने पहले ही ऐसा करने के लिए एक एल्गोरिथ्म लिखा है, लेकिन मैं यह जानना चाहूंगा कि क्या यह करने के लिए सरल या तेज तरीके हैं:
function numberToColumnName($number){
$abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$abc_len = strlen($abc);
$result_len = 1; // how much characters the column's name will have
$pow = 0;
while( ( $pow += pow($abc_len, $result_len) ) < $number ){
$result_len++;
}
$result = "";
$next = false;
// add each character to the result...
for($i = 1; $i<=$result_len; $i++){
$index = ($number % $abc_len) - 1; // calculate the module
// sometimes the index should be decreased by 1
if( $next || $next = false ){
$index--;
}
// this is the point that will be calculated in the next iteration
$number = floor($number / strlen($abc));
// if the index is negative, convert it to positive
if( $next = ($index < 0) ) {
$index = $abc_len + $index;
}
$result = $abc[$index].$result; // concatenate the letter
}
return $result;
}
क्या आप इसे करने का एक बेहतर तरीका जानते हैं? शायद कुछ सरल रखने के लिए? या एक प्रदर्शन में सुधार?
संपादित करें
ircmaxell का कार्यान्वयन बहुत अच्छा काम करता है। लेकिन, मैं इस छोटे से छोटे को जोड़ने जा रहा हूं:
function num2alpha($n)
{
for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
$r = chr($n%26 + 0x41) . $r;
return $r;
}