0

我写了一个函数,它把一个单词翻译成一个带数字的数组。铁

$alphas = range('a', 'z');
function dig_to_string($string) {
     global $alphas;
     $array = str_split($string);
     foreach($array as $a) {
         $digits[] = array_search($a,$alphas);
     }
     return $digits;
}
$word = 'color';
$array = dig_to_string($word);
// Array ( [0] => 2 [1] => 14 [2] => 11 [3] => 14 [4] => 17 )
// Because 'c' is the second alphabet's letter, 'o' is 14th and so on.
// Means 'a' has 0-index

有没有办法优化它?

4

4 回答 4

3

为什么不使用 map 并使用与 'a' 的差异来获取每个字符的代码

function code($n){return ord($n)-ord('a')+1;}
$b = array_map("code", str_split("hello"));
于 2013-05-29T05:45:24.773 回答
2

您可以简单地使用ord()

function string_to_digits($string) {
    $start=ord('a');
    $length=strlen($string);
    for($i=0;$i<$length;$i++)
    {
        $digits[]=ord($string[$i])-$start;  
              // $digits[]=ord($string[$i]);   //If you want ASCII code to be returned

    }
    return $digits;
}
于 2013-05-29T05:47:07.230 回答
1

也许这会好一些。我没有测试它,但我认为它应该工作;-)

function dig_to_string($string)
{
    $len = strlen($string);
    $digits = array();
    for($i=0;$i<$len;$i++){
        $digits[$i] = ord($string[$i])-97; //97 = ASCII for 'a'
    }
    return $digits;
}
于 2013-05-29T05:47:31.867 回答
0
function str_to_dig($string) {
    static $map = null;
    if ($map === null) {
        $map = array_flip(range('a', 'z'));
    }

    return array_map(function ($char) use ($map) { return $map[$char]; }, str_split($string));
}
  • 只初始化 char 数组一次而不使用global
  • 制作可以直接访问的地图,而不是多次搜索数组
  • array_map,因为weeee!^_^
于 2013-05-29T05:45:33.300 回答