2017-01-07 16 views
1

入力名の数値結果を作成するための小さなスクリプトがあります。名前とそれに対応する値を最初に繰り返した後、最終結果に数字を追加して、「マスター番号」を取得する必要があります。私が抱えている問題は、0を返し続ける最終結果を繰り返すことです。繰り返しに沿ってチェックすると、配列内の値が見つからないことがわかります。どこが間違っていたのですか?配列を反復すると値が見つからない

<?php 
if($_POST) 
{ 
    // create an array based on chaldean numerology 

    $ar = array('A' => 1, 
     'B' => 2,'C' => 3,'D' => 4,'E' => 5,'F' => 6,'G' => 7,'H' => 8,'I' => 9, 
     'J' => 1,'K' => 2,'L' => 3,'M' => 4,'N' => 5,'O' => 6,'P' => 7,'Q' => 8, 
     'R' => 9,'S' => 1,'T' => 2,'U' => 3,'V' => 4,'W' => 5,'X' => 6,'Y' => 7, 
     'Z' => 8,'1' => 1,'2' => 2,'3' => 3,'4' => 4,'5' => 5,'6' => 6,'7' => 7, 
     '8' => 8,'9' => 9); 

    //get the value entered by post method 
    $fname = $_POST['fname']; 
    //make it upper case. to avoid messing with small letters. 
    $fname = strtoupper($fname); 
    //find the length of the string entered 
    $len = strlen($fname); 

    //set a temp value to calculate 
    $fullnum = 0; 
    $masternum = 0; 

    //now loop through the string one by one and add the values 
    for($i=0; $i<$len; $i++) 
    { 
     $alpha = $fname[$i]; 
     $fullnum = $ar[$alpha] + $fullnum; 
    } 


    //now loop through the fullnum one by one and add the values 
    $flen = strlen($fullnum); 

    for($i=0; $i<$flen; $i++) 
    { 
     $alpha = $fullnum[$i]; 
     $masternum = $ar[$alpha] + $masternum; 
    } 

    //print the result 
    //echo "FLEN = " . $flen . "<br>"; 
    echo "<hr>INTEGRATED SELF NUMBER: ". $fullnum . "/" . $masternum; 
} 

?> 

<form action="" method="post"> 
    <input type="text" name="fname" value="Full Name" /> 
    <input type="submit" value="calculate" /> 
</form> 
+0

これは恐ろしいことです...私は数日前にこの質問にいくつかのコメントを残しました。今私は戻って来て、私はコメントがなくなったのを見る。私は削除されたコメントや何かについての通知を何も受け取らなかった。何が起こった?そのコメントはどこですか? – arkascha

+0

3人のユーザーからこの質問に6件のコメントがありました。明らかに彼らは削除されました。それは私の胃の中に_very_悪い気持ちを残します。このような検閲の形態は、ここに導入されるべきではない。 _特に、トレースを残さずに。 – arkascha

+0

私は実際には1つのコメントしか見たことがありません。それは邪魔です... –

答えて

1

あなたはその「アルゴリズム」の二つの問題があります:1.あなたが鍵を定義していない「0」という辞書の配列内をして2.であることを文字列に$ fullnumの数値型を変換する必要がありますあなたがしようとすると、配列表記の中の文字にアクセスすることができます。わずかに修正

<?php 
if($_POST) { 
    // create an array based on chaldean numerology  
    $ar = [ 
     'A' => 1, 
     'B' => 2,'C' => 3,'D' => 4,'E' => 5,'F' => 6,'G' => 7,'H' => 8,'I' => 9, 
     'J' => 1,'K' => 2,'L' => 3,'M' => 4,'N' => 5,'O' => 6,'P' => 7,'Q' => 8, 
     'R' => 9,'S' => 1,'T' => 2,'U' => 3,'V' => 4,'W' => 5,'X' => 6,'Y' => 7, 
     'Z' => 8,'0' => 0,'1' => 1,'2' => 2,'3' => 3,'4' => 4,'5' => 5,'6' => 6, 
     '7' => 7,'8' => 8,'9' => 9 
    ]; 

    //get the value entered by post method 
    $fname = $_POST['fname']; 
    //make it upper case. to avoid messing with small letters. 
    $fname = strtoupper($fname); 
    //find the length of the string entered 
    $len = strlen($fname); 

    //set a temp value to calculate 
    $fullnum = 0; 
    $masternum = 0; 

    //now loop through the string one by one and add the values 
    for($i=0; $i<$len; $i++) { 
     $alpha = $fname[$i]; 
     $fullnum = $ar[$alpha] + $fullnum; 
    } 

    //now loop through the fullnum one by one and add the values 
    $fullnum = "$fullnum"; 
    $flen = strlen($fullnum); 
    for($i=0; $i<$flen; $i++) { 
     $alpha = $fullnum[$i]; 
     $masternum = $ar[$alpha] + $masternum; 
    } 

    //print the result 
    //echo "FLEN = " . $flen . "<br>"; 
    echo "<hr>INTEGRATED SELF NUMBER: ". $fullnum . "/" . $masternum; 
} 
?> 
<form action="" method="post"> 
<input type="text" name="fname" value="Full Name" /> 
<input type="submit" value="calculate" /> 
</form> 

バージョンは、出力を作成しません。しかし、私は魔法の辞書を変更して明白に欠けている値( "0")を追加する必要があったので、それが正しい神秘的な数字かどうかは確かに分かりません。そのために残念。しかし、私はそれが本当に問題ではないと考えていますか? ;-)

+0

それは完全にそれでした - 私の変数が文字列ではなく整数としてキャストされたということが最大の原因でした。ありがとう - 私の部分の愚かな間違い。 –

関連する問題