2012-04-22 31 views
0

私はこのPHPコードを有する:ループが突然繰り返されなくなりますか?

<?php 
$numarray = trim($_GET['num']); 
$i = strlen($numarray); 
$result = ""; 
$numneedarray = array(
90 => 'ninety', 
80 => 'eighty', 
70 => 'seventy', 
60 => 'sixty', 
50 => 'fifty', 
40 => 'forty', 
30 => 'thirty', 
20 => 'twenty', 
19 => 'nineteen', 
18 => 'eighteen', 
17 => 'seventeen', 
16 => 'sixteen', 
15 => 'fifteen', 
14 => 'fourteen', 
13 => 'thirteen', 
12 => 'twelve', 
11 => 'eleven', 
10 => 'ten', 
9 => 'nine', 
8 => 'eight', 
7 => 'seven', 
6 => 'six', 
5 => 'five', 
4 => 'four', 
3 => 'three', 
2 => 'two', 
1 => 'one' 
); 
for ($v = 1; $v <= $i; $v++) { 
if ($i > 10) { 
exit("Has to be 10-digit or less."); 
} 
if ($i == 3) { 
    $result .= ", " . $numneedarray[$numarray[strlen($numarray) - 3]] . " hundred"; 
    if ($numarray % 100 == 0) { 
    echo "Hi95"; 
    break; 
    } 
} elseif ($i == 2) { 
    if ($numarray[$v] == 1) { 
     $othernum = $numarray[strlen($numarray) - 1]; 
     $othernum2 = $numarray[strlen($numarray) - 2] * 10; 
     $othernum3 = $othernum2 + $othernum; 
     if (strlen($numarray) > 2) { 
     $result .= " and "; 
     } 
     $result .= $numneedarray[$othernum3]; 
     echo "Hi107"; 
    } else { 
     $othernum = $numarray[strlen($numarray) - 2] * 10; 
     $othernum2 = $numarray[strlen($numarray) - 1]; 
     $result .= " and " . $numneedarray[$othernum] . " " . $numneedarray[$othernum2]; 
     echo "Hi112"; 
    } 
} 
if ($i == 10) { 
    $digit = substr($numarray, 0, 1); 
    $result .= $numneedarray[$digit] . " billion"; 
    if ($numarray % 1000000000 == 0) { 
    break; 
    } 
} elseif ($i == 9) { 
    $number = substr($numarray, 1, 3); 
    $digit1 = substr($number, 0, 1); 
    $digit1con = $numneedarray[$digit1] . " hundred"; 
    $digit2 = substr($number, 1, 1); 
    $noneed = false; 
    if ($digit2 != 1) { 
    $digit2con = $numneedarray[$digit2 * 10]; 
    } else { 
    $digit23 = substr($number, 1, 2); 
    $digit23con = $numneedarray[$digit23]; 
    $noneed = true; 
    } 
     $digit3 = substr($number, -1); 
     $digit3con = $numneedarray[$digit3]; 
    if ($noneed == true) { 
     $result .= ", " . $digit1con . " and " . $digit23con . " million"; 
    } else { 
     $result .= ", " . $digit1con . " and " . $digit2con . " " . $digit3con . " million"; 
    } 
    if ($numarray % 100000000 == 0) { 
    echo "Hi"; 
    break; 
    } 
} elseif ($i == 6) { 
    $number = substr($numarray, 4, 3); 
    $digit1 = substr($number, 0, 1); 
    $digit1con = $numneedarray[$digit1] . " hundred"; 
    $digit2 = substr($number, 1, 1); 
    $noneed = false; 
    if ($digit2 != 1) { 
    $digit2con = $numneedarray[$digit2 * 10]; 
    } else { 
    $digit23 = substr($number, 1, 2); 
    $digit23con = $numneedarray[$digit23]; 
    $noneed = true; 
    } 
     $digit3 = substr($number, -1); 
     $digit3con = $numneedarray[$digit3]; 
    if ($noneed == true) { 
     $result .= ", " . $digit1con . " and " . $digit23con . " thousand"; 
    } else { 
     $result .= ", " . $digit1con . " and " . $digit2con . " " . $digit3con . " thousand"; 
    } 
    if ($numarray % 100000 == 0) { 
    echo "Hi89"; 
    break; 
    } 
} 
echo $i; 
$i = $i - 1; 
} 
if (strlen($numarray) == 1) { 
    echo $numneedarray[$numarray]; 
} 
echo $result; 
?> 

num値は1234567890に等しいです。ページを更新すると、$iの値は10 -> 9 -> 8 -> 7 -> 6から瞬時に停止します。なぜループは停止しますか?

+1

何 '$ numarray'をすることになっていますか? – Jack

+0

これは '$ _GET ['num']'の値です。 – think123

+1

私はphpを知らないのですが、vをインクリメントしてループ内のデクリメントしていないのですか?今半分のところで会いますか? – Naveen

答えて

2

あなたは各桁をチェックしてみてください:

for ($v = 1; $v <= $i; $v++) { 

しかし、その後、あなたがループ内で $iを減らす:あなたが予想より少ないループを参照してください理由

$i = $i - 1; 

だこと。

+0

ありがとう! – think123

0

最適ではない - しかし、変更

$i = strlen($numarray); 

$i = strlen($numarray); 
$count = $i; 

for ($v = 1; $v <= $i; $v++) 

for ($v = 1; $v <= $count; $v++) 
+0

...なぜ誰か-1これは正しい答えだった?それは問題を解決する? – Laurence

+0

私はあなたの-1を削除しましたが、それは私ができることです。残念です。 – think123

+0

thats ok - 私はちょうどあなたが問題を解決したときに-1だった理由を混乱させました:)すべてgood – Laurence

関連する問題