PHP循环不起作用,我做错了什么?

时间:2016-09-15 18:51:16

标签: php

我正在构建一个可以接收2个参数,一个字符串和一个数字的函数。 它基本上会打印$ s的第一个字母$。

  • 我需要运行一个循环,请不要建议其他非循环方法。
  • 是的,我需要在整个函数中保持循环为真,假设在满足if时关闭。

由于某种原因,即使在return等于if(= 10 in)时$stringCounter条件中存在$n,循环也不会关闭这个例子。)

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

printCounter('aba', '10');

3 个答案:

答案 0 :(得分:1)

你应该在循环中使用$ stringCounter的计算,否则这永远不会改变

    $stringCaller = '';

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

答案 1 :(得分:0)

在我看来,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;

答案 2 :(得分:0)

您可以通过更新循环中的$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;
        }
    }
}

但是,即使您修复了该问题,仍然会出现循环永远不会退出的情况(例如问题中的示例),因为$stringCounter只能等于 {{ 1}}如果$n$n的倍数。

示例strlen($s)

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个字符,则该函数需要更复杂一些,并使用$s的子字符串来弥补其余$stringCounter + strlen($s)大于$n时的字符数,或者返回结果的$n字符子字符串,如下所示:

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