2012-01-24 16 views
0

私は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)]; 
} 
+1

にすることができます。 – lonesomeday

+0

これは1回だけ反復し、1つのcharを返します。ここで、jsでは複数の文字が返されます。 – sed

+2

PHPでは、次のようなことができます: '$ type = strlen($ sourceBase)%2? "奇数": "偶数";あなたがJavaScriptのようにif文を凝縮する。 – Batkins

答えて

5

連結演算子おそらく(あなたの関数は、文字列または数値を返すかどうかによって異なります):ここで

return $base . $table[strpos($neighbors[$direction][$type], $lastChar)]; 
-------------^ 

.は、PHPは、連結のためのJSの+を交換するために使用されています。

+0

はい、それでした、私はそれがちょっとしたものであることを知っていました。ありがとう! – sed

+0

@Qmal:どうぞよろしくお願いいたします。 – Sarfraz

0

$borders変数は定義されていません(または範囲外です)。

編集:$neighborsもあります。

+0

配列はコード内で多くのスペースを取るので、私はそれらを切り捨てました。 – sed

+0

@ Qmalそれでは、少なくともコメントのついた行を残しておいてください。それは重要な詳細です。 –

0

また、JSでは3者演算子を使用していますが、PHPでは使用できません。理由だけに興味がありますか?

if (strlen($sourceBase) % 2) 
{ 
    $type = "odd"; 
} 
else 
{ 
    $type = "even"; 
} 

は `$のtable`は、PHPの関数内で定義されていないPHP

$type = strlen($sourceBase) % 2 ? "odd" : "even";