$var='zz';
echo chartodata($var);
function chartodata($var='')
{
$charArr=array(
'1'=>'a',
'2'=>'b',
'3'=>'c',
'4'=>'d',
'5'=>'e',
'6'=>'f',
'7'=>'g',
'8'=>'h',
'9'=>'i',
'10'=>'j',
'11'=>'k',
'12'=>'l',
'13'=>'m',
'14'=>'n',
'15'=>'o',
'16'=>'p',
'17'=>'q',
'18'=>'r',
'19'=>'s',
'20'=>'t',
'21'=>'u',
'22'=>'v',
'23'=>'w',
'24'=>'x',
'25'=>'y',
'26'=>'z',
);
$charTempLen = strlen($var);
if($charTempLen<2)
{
foreach($charArr as $k=>$v)
{
if($v==$var)
{
return $k;
}
}
}else{
$array=str_split($var);
$tempArrLen = count($array);
$tempsplitArr = '';
$tempFata = '';
for($i=0;$i<$tempArrLen;$i++)
{
$tempsplitArr = $array[$i];
foreach($charArr as $k=>$v)
{
$arrKey = '';
if($v==$tempsplitArr)
{
$arrKey .= $k.',';
}
$tempFata .= $arrKey;
}
}
$tempArrt = explode(',',$tempFata);
return $tempArrt[0]*26+$tempArrt[1];//这里该如何遍历这个数组,我只能到2位字母,这里以后的三位不会了
}
}
按照26个字母的进制算输入 a 输出 1
aa 1*26+1 = 27
az 1*26+26 = 52
ba 2*26+1 = 53
.....
zz 26*26+26 = 702......
以后的该如何做啊?
arr[1]*100;
arr[3]*1000
.......
return arr;
这个样子的
$charArr = array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
'e' => 5,
'f' => 6,
'g' => 7,
'h' => 8,
'i' => 9,
'j' => 10,
'k' => 11,
'l' => 12,
'm' => 13,
'n' => 14,
'o' => 15,
'p' => 16,
'q' => 17,
'r' => 18,
's' => 19,
't' => 20,
'u' => 21,
'v' => 22,
'w' => 23,
'x' => 24,
'y' => 25,
'z' => 26,
);
$s = strtolower($var);
$r = 0;
for($i=0; $i<strlen($s); $i++) {
$r = (26 * $r) + $charArr[$s{$i}];
}
return $r;
}
function chartodata($var='')
{
$charArr=array('1'=>'a','2'=>'b','3'=>'c','4'=>'d','5'=>'e','6'=>'f','7'=>'g','8'=>'h','9'=>'i','10'=>'j','11'=>'k','12'=>'l','13'=>'m','14'=>'n','15'=>'o','16'=>'p','17'=>'q','18'=>'r','19'=>'s','20'=>'t','21'=>'u','22'=>'v','23'=>'w','24'=>'x','25'=>'y','26'=>'z');
$arrChar = str_split($var);
$length = strlen($var);
$return = 0;
foreach($arrChar as $key=>$value)
{
$length--;
$return += pow(26,$length) * array_search($value, $charArr);
}
return $return;
}
function abc2num($chr=""){
$chr = strtolower($chr);
$abc = "abcdefghijklmnopqrstuvwxyz";
$len = strlen($abc);
$result = 0;
for($i =0 ;$i< strlen($chr);$i++){
$num = strpos($abc,$chr[$i]);
if($num !== false){
$num++;
$result += $num * pow ($len,strlen($chr) -$i-1);
}
}
echo $result;
}
abc2num("cay");
$t = 'zz';
$sum = 0;
$array = str_split(strrev($t));
array_walk($array, 'my_func');
echo $sum;function my_func($item, $key)
{
global $sum;
$sum += (ord(strtoupper($item)) - 64) * pow(26, $key);
}
?>
刚开始看的时候走了N多弯路.主要是10进制的根深地固了.其实这个问题,上手的时候最先解决的就是构造一个通用表达式.
假设n代表字符的位置,位置最左面的为0; x代表的值.
每个位置的值就是:x * 26的n次方完成这个,实现就不是问题了.