有没有办法在PHP中以字母格式显示数字?

时间:2014-07-17 12:29:28

标签: php numbers format

我正在寻找从任何数字获取字母格式的最短路径。我可以用很多条件来做,如果,elseif-s,但我需要简短的方法。

$mynumber=35566693;
$mynumber2=9444333;
echo some_format_function($mynumber).', ';
echo some_format_function($mynumber2);
//result should be something like ABBCCCDA, ABBBCCC

更新:详细说明 - 根据这些规则,应将编号转换为字母格式: 1.首先出现的数字应转换为A,第二个数字应转换为B,第三个数字转换为C,依此类推。 2.重复的数字应转换为相同的字母(3453 => ABCA,而不是ABCD,而不是JKSJ)

3 个答案:

答案 0 :(得分:3)

试图在回答之前成为第一个真正你的问题的人,试试这个:

function num_to_letter($num) {
    $map = array();
    $letters = str_split("ABCDEFGHIJ"); // ten characters
    return preg_replace_callback("/\d/",function($n) use (&$map,&$letters) {
        $digit = $n[0];
        if( !isset($map[$digit])) $map[$digit] = array_shift($letters);
        return $map[$digit];
    },$num);
}

用法:

echo num_to_letter(3556693); // ABBCCDA

对于较长的数字,请将它们作为字符串传递:

echo num_to_letters("1123124648976127846187243232234");
                  // AABCABDEDFGHEABHFDEAFHBDCBCBBCD

答案 1 :(得分:0)

str_replace(
  [0,1,2,3,4,5,6,7,8,9], 
  ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
  $mynumber
);

应该做的伎俩。

UPD 对于本地字母顺序:

$a=[0,1,2,3,4,5,6,7,8,9]; // stub subst array
$l=chr(ord('A')-1);       // first letter
foreach(str_split($mynumber) as $sym) { 
  if(is_int($a[$sym]))    // first meet 
    $a[$sym] = $l = chr(ord($l)+1); 
}
str_replace(              // let’s go
  [0,1,2,3,4,5,6,7,8,9], 
  $a,
  $mynumber
);

答案 2 :(得分:0)

正如你解释的那样,你想要的是这样的功能:

<?php
$mynumber=35566693;
$mynumber2=9444333;
$mynumber3=3453;
echo some_format_function($mynumber).', ';
echo some_format_function($mynumber2).', ';
echo some_format_function($mynumber3);

 function some_format_function ($int) {
     $out = '';

     $use = array('A','B','C','D','E','F','G','H','I','J');


     $usedIndex = -1;     

     $mappings = array();

     for ($x =0; $x<strlen($int);++$x) {

         $curChar = substr($int,$x,1);

         if (!isset($mappings[$curChar])) {
            ++$usedIndex;
            $mappings[$curChar]  = $use[$usedIndex];                
         }

         $out .= $mappings[$curChar];


     }
     return $out;
 }