2012-01-21 96 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 

爲什麼?我的錯誤在哪裏?我怎樣才能改變順序?
我的代碼必須是什麼樣的?
在此先感謝!

回答

3

後添加print_r(array_reverse($words_length));如果你只是想在相反的順序輸出使用array_reverse

print_r(array_reverse($words_length)); 
1

最快的解決方法是循環

+0

但它返回'陣列([0] => 6 [1] => 1 [2] => 4) ':( – John

1

您的問題是,你通過的話循環左到右。您無法從右向左輸出全長,因爲每個都取決於剩下的單詞。

您可以將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)); 
+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; 
}