[英]PHP loop isn't working, what am I doing wrong?
我正在建立一個函數,它將接收2個參數,一個字符串和一個數字。 它基本上會打印$ s的第一個字母$ n。
if
時關閉。 出於某種原因,循環不打烊,即使有一個return
的if
條件時被滿足$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;
}
}
}
但是,即使在解決了該問題之后,仍然存在循環永遠不會退出的情況(例如您問題中的示例),因為如果$n
是strlen($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.