私はjavascriptで関数を持っていますが、これはうまくいきますが、今ではPHPで同じ関数が必要で、非常に奇妙な振る舞いをしています。機能は同じですが、私は何かを見逃して、それを見つけることができません。JSからPHPへの変換関数
ボーダー、ネイバーはあらかじめ定義された配列であり、ベースはあらかじめ定義されたストリングです。
Javaスクリプト
function calculateAdjacent(sourceBase, direction) {
sourceBase = sourceBase.toLowerCase();
var lastChar = sourceBase.charAt(sourceBase.length-1);
var type = (sourceBase.length % 2) ? 'odd' : 'even';
var base = sourceBase.substring(0,sourceBase.length-1);
if (BORDERS[direction][type].indexOf(lastChar)!=-1)
{
base = calculateAdjacent(base, direction);
}
return base + TABLE[NEIGHBORS[direction][type].indexOf(lastChar)];
}
PHP
($表、$隣人は、$国境が定義されている、彼らは多くのスペースを取るが、私はそれですることができますが。)
function calculateAdjacent($sourceBase, $direction)
{
$sourceBase = strtolower($sourceBase);
$lastChar = $sourceBase[strlen($sourceBase) - 1];
if (strlen($sourceBase) % 2)
{
$type = "odd";
}
else
{
$type = "even";
}
$base = substr($sourceBase, 0, strlen($sourceBase) - 1);
if (strpos($borders[$direction][$type], $lastChar) === false)
{
$base = calculateAdjacent($base, $direction);
}
// Problem in this line, need to fix '+' to '.'
return $base + $table[strpos($neighbors[$direction][$type], $lastChar)];
}
にすることができます。 – lonesomeday
これは1回だけ反復し、1つのcharを返します。ここで、jsでは複数の文字が返されます。 – sed
PHPでは、次のようなことができます: '$ type = strlen($ sourceBase)%2? "奇数": "偶数";あなたがJavaScriptのようにif文を凝縮する。 – Batkins