2012-07-26 31 views
0

我想從給定的文本形成首字母縮略詞。這裏的想法是$ text中的第一個字母($ text [0])將被採用,並使用array_push()放置在數組$ storage中。現在,如果數組內有空格,則下一個索引的字母應該是Acronym的一部分。我目前沒有獲得輸出,我錯過了什麼?沒有輸出? PHP的foreach似乎沒有工作

public function Acronym($text) 
     { 
      $text = str_split($text); 
      $count = strlen($text); 
      $storage = array(); 

      for($i=0; $i<$count; $i++) 
      { 
       array_push($storage, $text[0]); 

       if($text[$i]==' ') 
       { 
        array_push($storage, $text[$i+1]); 
       } 

       foreach($storage as $clean) 
       { 
        echo $clean; 
       }  
      } 
     } 
+1

請提供示例輸入和輸出 – VolkerK 2012-07-26 13:38:52

+1

您的算法實現和解釋是兩個完全不同的事情。 – nickb 2012-07-26 13:39:15

+0

你如何調用這個函數和你收到什麼輸出? – FatalError 2012-07-26 13:39:29

回答

2

你的算法從幾個致命的缺陷所害:

  1. 你調用一個數組,在strlen()時,你應該叫count()

    $text = str_split($text); 
    $count = count($text); 
    
  2. 但是,可以將字符串索引爲數組,因此在這種情況下不需要str_split(),並且可以通過刪除對str_split()的調用來保留$count = strlen($text);

  3. 這應該只發生一次,所以它應該是外循環(這意味着從1開始$i):

    array_push($storage, $text[0]); 
    
  4. foreach循環,打印$storage陣列應採用循環之外的正在創造首字母縮略詞。

  5. 您可以通過使用簡寫符號array_push()表示法來節省調用函數的開銷。將多個元素添加到數組時,應該使用array_push()。否則,就足夠了:

    $storage[] = $text[0]; 
    
  6. 你需要從你的函數return的東西,否則你將無法在其外部訪問任何東西。

把那個放在一起,你會得到這樣的:

public function Acronym($text) 
{ 
    $count = strlen($text); 

    $storage[] = $text[0]; 

    for($i = 1; $i < $count; $i++) 
    { 
     if($text[$i] == ' ') 
     { 
      $storage[] = $text[$i+1]); 
      $i++; // Can increment $i here because we know the next character isn't a space 
     } 
    } 
    foreach($storage as $clean) 
    { 
     echo $clean; 
    } 
    return $storage; 
} 

話雖這麼說,有形成的縮寫給人一種字符串輸入更好的實現。這是一個我能想到的:

public function Acronym($text) 
{ 
    $acronym = array(); 
    foreach(explode(' ', $text) as $word) 
    { 
     $word = trim($word); 
     $acronym[] = strtoupper($word[0]); 
    } 
    return implode('', $acronym); 
} 

注意,這兩個功能將像Hello World輸入失敗。我將它留給OP來進行這些修改(如有必要)。

+0

謝謝@nickb。偉大的幫助:) – user1242749 2012-07-26 13:59:27

+0

嘿@nickb,只是一個簡單的問題。假設我想獲得數組的最後一個字,並且可能array_push在數組上,它是如何做到的?例如,如果我要輸入自動櫃員機,那麼輸出就像ATM機。我該如何去做呢? – user1242749 2012-07-26 14:30:25

+0

另外一個(文體)錯誤:不要將您的函數縮寫爲大寫字母A.當其他人讀取您的代碼時,他們會認爲它是一個類,而不是函數。 – Doa 2012-07-26 14:48:09

0

你在$count是從str_len獲取其價值的,因爲在$text = str_split($text);

所以,你必須覆蓋您的$text變量返回的數組運行你的循環中,您可以通過更改爲了得到長先解決它然後分裂。

0

您覆蓋第一個變量$text

$count = strlen($text); 

在這一行$text是一個數組,因爲你在方法的第一行改變了它。

嘗試反轉兩個第一線:

$count = strlen($text); 
$text = str_split($text); 

注意

這將解決你的第二個問題,並讓你的算法要無差錯地運行。它不能修復你的算法,但至少你現在可以調試它。

0

str_split將字符串轉換爲數組。

str_length帶來了已經用數組覆蓋的字符串的長度。你需要count()