[英]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;
}
}
}
你的算法有一些致命的缺陷:
當你應該調用count()
時,你在數組上調用strlen()
count()
:
$text = str_split($text); $count = count($text);
但是,您可以將字符串索引為數組,因此在這種情況下您不需要str_split()
,並且可以保留$count = strlen( $text);
刪除對str_split()
的調用。
這應該只發生一次,所以它應該在循環之外(這意味着在1處開始$i
):
array_push($storage, $text[0]);
打印$storage
數組的foreach
循環應該在創建首字母縮寫詞的循環之外。
您可以使用簡寫的array_push()
表示法來節省調用函數的開銷。 在向數組添加多個元素時,應使用array_push()
。 否則,這就足夠了:
$storage[] = $text[0];
您需要從函數中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.