计算两个字符之间的距离

时间:2018-03-13 18:51:58

标签: php

是否有内置函数可以计算2个字符之间的距离?例如:

如果我想计算ac之间的距离,则结果应为1,因为ac之间只有一个字母。

我做了一个功能来实现这一点,但我需要知道是否有内置解决方案或更简单的解决方案

function str_distance($a, $b){
    $cant = 0;
    while(true){
        if (++$a == $b)
            return $cant;
        $cant++;
    }
}

但是在计算zb或任何到达字母表末尾的计算时,这不会起作用。

有什么建议吗?

6 个答案:

答案 0 :(得分:4)

$firstChar = 'a';
$secondChar = 'z';

$distance = abs( ord($firstChar) - ord($secondChar) );
你正在寻找这样的东西吗? ord返回字符的ascii代码,我们使用abs来补偿负距离,或者你可以保持这个操作的符号以知道它们的不同之处(如果第一个大于或小于第二个),取决于你想要达到的目标

修改

function letterDistance($a, $b){
    $alphLetterCount = ord('z') - ord('a');

    $distance = ord(strtolower($b)) - ord(strtolower($a));

    return ($distance < 0 ? $alphLetterCount + $distance : $distance-1);
}

这个功能与OP想要的完全一致 - 距离&#39; z&#39;到&#39;&#39;是1和来自&#39; b&#39;到&#39; z&#39;是23,它也不区分大小写

答案 1 :(得分:1)

function Letter_Distance($x,$y){
    $L1 = strtolower($x);
    $L2 = strtolower($y);
    $alphabet = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
    $pos1 = array_search($L1, $alphabet);
    $pos2 = array_search($L2, $alphabet);
    return abs(($pos1 - $pos2)) - 1;
}

echo Letter_Distance("a","c");
  

1

希望这有帮助,随时调整它

答案 2 :(得分:0)

只需在php中使用ord()函数并获取char的int值。 像这样使用它 `

function str_distance($a, $b){
    return ord($b) - ord($a);
}

echo str_distance('a', 'c') - 1;

`

答案 3 :(得分:0)

好吧,这看起来有点愚蠢,但我很无聊:

return count(array_diff(range($a, $b), [$a, $b]));
  • 创建从$a$b
  • 的范围
  • 获取范围与2个字符$a$b
  • 之间的差异
  • 计算差异

答案 4 :(得分:0)

我希望函数更喜欢在从Z到A时使用-符号返回,并且还要处理小写

private function str_distance($start,$finish)
{
   return ord(lcfirst($finish)) - ord(lcfirst($start));
}
   //str_distance('a','z') => 25
   //str_distance('Z','A') => -25

答案 5 :(得分:0)

递归版:

function str_distance($a, $b, $c = 0) {
    if ($a > $b) return str_distance($b, $a, $c);
    if (++$a >= $b) return $c;
    return str_distance($a, $b, ++$c);
}