簡體   English   中英

沒有輸出? PHP foreach似乎不起作用

[英]No Output? PHP foreach doesn't seem to work

我試圖從給定的文本形成一個首字母縮略詞。 這里的想法是$ text($ text [0])中的第一個字母將被取出並使用array_push()放入數組$ storage中。 現在,如果數組中有空格,則下一個索引的字母應該是Acronym的一部分。 我目前沒有得到一個輸出,我錯過了什么?

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. 當你應該調用count()時,你在數組上調用strlen() count()

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

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

     array_push($storage, $text[0]); 
  4. 打印$storage數組的foreach循環應該在創建首字母縮寫詞的循環之外。

  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進行這些修改(如有必要)。

你在$count上運行你的循環,因為返回$text = str_split($text);它從str_len獲取它的值是一個數組$text = str_split($text);

因此,您已經覆蓋了$text變量,您可以通過首先更改訂單獲取長度然后拆分來修復它。

您覆蓋了第一個變量$text

$count = strlen($text);

在這一行中, $text是一個數組,因為您在方法的第一行中更改了它。

嘗試反轉兩個第一行:

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

注意

這將解決您的第二個問題,並使您的算法運行沒有錯誤。 它不能修復你的算法,但至少你現在可以調試它。

str_split將字符串轉換為數組。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM