我正在构建一个可以接收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');
答案 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);
}
}
}