是否有内置函数可以计算2个字符之间的距离?例如:
如果我想计算a
和c
之间的距离,则结果应为1
,因为a
和c
之间只有一个字母。
我做了一个功能来实现这一点,但我需要知道是否有内置解决方案或更简单的解决方案
function str_distance($a, $b){
$cant = 0;
while(true){
if (++$a == $b)
return $cant;
$cant++;
}
}
但是在计算z
到b
或任何到达字母表末尾的计算时,这不会起作用。
有什么建议吗?
答案 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
$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);
}