簡體   English   中英

PHP循環無法正常工作,我在做什么錯?

[英]PHP loop isn't working, what am I doing wrong?

我正在建立一個函數,它將接收2個參數,一個字符串和一個數字。 它基本上會打印$ s的第一個字母$ n。

  • 我需要運行一個循環,請不要建議其他非循環方法。
  • 是的,我需要在整個函數中保持循環為真,假設在遇到if時關閉。

出於某種原因,循環不打烊,即使有一個returnif條件時被滿足$stringCounter等於$n (在本例中為10)。

function printCounter($s, $n)
{
    $stringCaller = '';
    $stringCounter = strlen($stringCaller);
        while (1) {
            $stringCaller .= $s;
            if ($stringCounter == $n) {
                return $stringCaller;
            }
        }
}

printCounter('aba', '10');

您應該在循環內移動$ stringCounter的計算,否則就永遠不會改變

    $stringCaller = '';

    while (1) {
        $stringCounter = strlen($stringCaller);
        $stringCaller .= $s;
        if ($stringCounter >= $n) {
            return $stringCaller;
        }
    }

我認為TS正在尋找下一個方法:

function printCounter($s, $n)
{
    $result = '';
    $str_lenght = strlen($s);
    if(!$str_lenght) {
        return $result;
    }
    while (true) {
        $result .= $s;
        $result_lenght = strlen($result);
        if($result_lenght/$str_lenght >= $n) {
            return $result_lenght;
        }
    }
}

echo printCounter('aba', '10');
exit;

您可以通過在循環內更新$stringCounter來解決部分問題。

function printCounter($s, $n)
{
    $stringCaller = '';
    while (1) {
        $stringCaller .= $s;
        $stringCounter = strlen($stringCaller); // check strlen after each addition of $s
        if ($stringCounter == $n) {
            return $stringCaller;
        }
    }
}

但是,即使在解決了該問題之后,仍然存在循環永遠不會退出的情況(例如您問題中的示例),因為如果$nstrlen($s)的倍數,則$n $stringCounter只能等於 $n

對於示例printCounter('aba', '10');

Iteration   $stringCounter    ($stringCounter == $n)
    1             3                   false
    2             6                   false
    3             9                   false
    4             12                  false

顯然, $stringCounter只會離$n更遠。

因此,要確保函數將退出,請使用以下方法檢查不等式:

if ($stringCounter >= $n) {

如果您需要該函數精確返回$n字符,則該函數將需要稍微復雜一點,並且當$stringCounter + strlen($s)大於$n時,請使用$s的子字符串來組成其余字符。 ,或返回結果的$n字符子字符串,如下所示:

function printCounter($s, $n)
{
    $result = '';
    while (1) {
        $result .= $s;
        if (strlen($result) >= $n) {
            return substr($result, 0, $n);
        }
    }
}

暫無
暫無

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

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