$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......
以后的该如何做啊?

解决方案 »

  1.   

    遍历数组,如何能让arr变成arr[0]*10;
    arr[1]*100;
    arr[3]*1000
    .......
    return arr;
    这个样子的
      

  2.   

    function chartodata($var='') {
      $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;
    }
      

  3.   


    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;
    }
      

  4.   


    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");
      

  5.   

    看看这个,虽然揭帖了。<?php
    $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);
    }
    ?> 
      

  6.   

    不错的帖子,呵呵.
    刚开始看的时候走了N多弯路.主要是10进制的根深地固了.其实这个问题,上手的时候最先解决的就是构造一个通用表达式.
    假设n代表字符的位置,位置最左面的为0; x代表的值.
    每个位置的值就是:x * 26的n次方完成这个,实现就不是问题了.