Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192742
  • 博文数量: 43
  • 博客积分: 366
  • 博客等级: 一等列兵
  • 技术积分: 427
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-17 14:03
文章分类

全部博文(43)

文章存档

2018年(2)

2017年(5)

2016年(2)

2015年(3)

2014年(9)

2013年(5)

2012年(8)

2011年(9)

我的朋友

分类: PHP

2014-03-15 09:42:21


点击(此处)折叠或打开

  1. /**
  2.      * 26进制(A-Z)转10进制int(1-10),服务于excel列数转换
  3.      * @param string $colnum
  4.      * @return number
  5.      */
  6.     public function transXlsColNumToInt($colnum){
  7.         $result_int = 0;
  8.         $column = trim($colnum);
  9.         if(empty($colnum)) return $result_int;
  10.         $column_len = strlen($colnum);
  11.         $bit_curr = pow(26, ($column_len-1));
  12.         $start_pos = 0;
  13.         while($start_pos<=$column_len-1){
  14.             $chr = substr($colnum, $start_pos);
  15.             $result_int += (ord(strtoupper($chr))-64) * $bit_curr;
  16.             $bit_curr /= 26;
  17.             $start_pos++;
  18.         }
  19.         return $result_int;
  20.     }
  21.     
  22.     /**
  23.      * 10进制int(1-10)转26进制A-Z,服务于excel列数转换
  24.      * @param int $intnum
  25.      * @return string
  26.      */
  27.     public function transIntToXlsColNum($intnum){
  28.         $result_num = "";
  29.         if(empty($intnum) || !is_numeric($intnum)) return $result_num;
  30.         $remainder = 0;
  31.         $int_last = doubleval($intnum);
  32.         while($int_last>0){
  33.             $remainder = fmod($int_last-1, 26) + 1; // 太大的数,使用%会导致溢出;由于26进制,应该是0-25,所以这里要减掉当前位置上多出的1
  34.             $int_last = doubleval(floor(($int_last-1) / 26));
  35.             $result_num = chr($remainder+64) . $result_num;
  36.         }
  37.         return $result_num;
  38.     }

阅读(1849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~