我正在尝试创建一个计算gematria的PHP应用程序。 Gematria是一种将文字转化为数字的秘密语言。我用它来处理没有重复字母的单词。
有效的词语:
不起作用的词语:
/**
* English Gematria Values
*
* @return array $array An array of key value pairs
*/
function english_values() {
$values = array(
'a' => 6,
'b' => 12,
'c' => 18,
'd' => 24,
'e' => 30,
'f' => 36,
'g' => 42,
'h' => 48,
'i' => 54,
'j' => 60,
'k' => 66,
'l' => 72,
'm' => 78,
'n' => 84,
'o' => 90,
'p' => 96,
'q' => 102,
'r' => 108,
's' => 114,
't' => 120,
'u' => 126,
'v' => 132,
'w' => 138,
'x' => 144,
'y' => 150,
'z' => 156,
);
return $values;
}
function calculator( $word ) {
$split = array_flip( str_split( $word ) );
$english = array_intersect_key( english_values(), $split );
return $english;
}
print_r( calculator( 'tesla ') );
echo "</br></br>";
print_r( calculator( 'monsanto ') );
输出结果为:
数组([a] =&gt; 6 [e] =&gt; 30 [1] =&gt; 72 [s] =&gt; 114 [t] =&gt; 120)
阵列([a] =&gt; 6 [m] =&gt; 78 [n] =&gt; 84 [o] =&gt; 90 [s] =&gt; 114 [t] =&gt; 120)
你可以看到特斯拉能够通过每个字母。但孟山都错过了最后一个o所以我无法计算出正确的总数。
我也希望这些字母按照这个词的顺序排列,以便特斯拉输出:
数组([t] =&gt; 120 [e] =&gt; 30 [s] =&gt; 114 [1] =&gt; 72 [a] =&gt; 6)
我可能正在使用错误的PHP函数来处理这个问题,所以我会在正确的方向上给予任何帮助。我有一段时间没有编码所以我有点生疏了。我尝试了多个PHP函数,但这似乎让我最接近我需要做的事情。谢谢。
编辑:我也理解重复字母不显示的原因是因为不能有重复的键。所以我认为我这样做可能相当倒退。
答案 0 :(得分:0)
希望这会让你前进:
print_r(encodeWord('monsanto'));
function encodeWord($word) {
for ($i = 0; $i < strlen($word); $i++) {
$encodedWord[] = [
'letter' => $word[$i],
'convertedLetter' => convertLetter($word[$i]),
];
}
return $encodedWord;
}
function convertLetter($letter) {
$values = [
'a' => 6,
'b' => 12,
'c' => 18,
'd' => 24,
'e' => 30,
'f' => 36,
'g' => 42,
'h' => 48,
'i' => 54,
'j' => 60,
'k' => 66,
'l' => 72,
'm' => 78,
'n' => 84,
'o' => 90,
'p' => 96,
'q' => 102,
'r' => 108,
's' => 114,
't' => 120,
'u' => 126,
'v' => 132,
'w' => 138,
'x' => 144,
'y' => 150,
'z' => 156,
];
return $values[$letter];
}
答案 1 :(得分:0)
对于双字母,似乎您使用的功能将无法看到它们。也许你应该做自己的功能,就像刚回答的那样。
要使字母以与给定单词相同的顺序出现,您只需在array_intersect_key()调用中切换参数即可。所以:
$english = array_intersect_key( $split , english_values() );
而不是
$english = array_intersect_key( english_values(), $split );