2012-01-21 54 views
1

文字列内の次の単語から文字数を取得したいとします。私の入力がI am Johnある場合たとえば、その後、出力は次のようにする必要があります
whileループでの注文方法は?

9 // count of 'I am John' 
4 // count of 'I am' 
1 // count of 'I' 

私は、このプロセスのためのPHPで、このようなコードを使用します。

$string = 'I am John'; 
$words = explode(' ',$string); 
$count_words = count($words); 

$i =0; 
while ($i<$count_words){ 
    if($i==0) { 
    $words_length[$i] = strlen($words[$i]); 
    } else { 
    $words_length[$i] = strlen($words[$i])+1+$words_length[$i-1]; 
    } 
    echo $words_length[$i]."<br>"; 
    $i++; 
} 

しかし、それは、このような出力を返します:

1 
4 
9 

なぜですか?私のエラーはどこですか?注文をどのように変更できますか?
私のコードはどのようなものでなければならないのですか?
ありがとうございます!

print_r(array_reverse($words_length)); 

答えて

3

print_r(array_reverse($words_length));を追加することです左から右へ。全長は左から左に出力されるため、右から左に出力することはできません。

ループからechoを取り出して、すべてが計算された後に値を出力することができます。

$string = 'I am John'; 
$words = explode(' ',$string); 
$count_words = count($words); 

$i =0; 
while ($i<$count_words){ 
    if($i==0) { 
     $words_length[$i] = strlen($words[$i]); 
    } else { 
     $words_length[$i] = strlen($words[$i])+1+$words_length[$i-1]; 
    } 
    $i++; 
} 

print implode('<br />', array_reverse($words_length)); 
1

最速の修正はarray_reverseループ

+0

それは '配列を返す([0] => 6 [1] => 1 [2] => 4) ':( – John

1

あなたの問題は、あなたが言葉をループしているということです:あなたは、単に逆の順序で出力を使用したい場合は

+0

正確に!私が必要なものです!ありがとう) – John

+0

今、これらの数字(9,4,1)でプロセスを実行したいと思います。だから、それは配列でなければならない。これどうやってするの ? – John

+0

@Johnループの後には、 'array(1,4,9)'があります。 'array_reverse($ words_length)'で 'array(9,4,1)' – Adam

0

あなたが配列値を取得するためのforeachを使用しarray_reverseできる:

foreach(array_reverse($words_length) as $val){ 
echo $val; 
}