我试图编写一个循环,将一个数字附加到字符串的开头,直到它是15个字符长。我错过了什么?
$i = rand(1,9);
while (strlen($fileNameNS > 15)){
$file13 = $i . $i . $fileNameNS;
}
$i++;
在循环的每次迭代中,您修改$file13
,但循环只查看$fileNameNS
,它永远不会改变!因为它永远不会改变,如果循环条件最初为真,它将永远为真,并且永远不会退出。
也许你是这个意思:
$fileNameNS = $i . $i . $fileNameNS;
你的情况也在两个方面混淆了。
- 当长度小于预期长度时,您应该继续,而长度大于预期长度时,您正在继续。
- 当你应该对
strlen($fileNameNS)
的值进行比较时,你将strlen
应用于$fileNameNS > 15
的比较。
while(strlen($fileNameNS) < 15) {
注意,因为每次添加两个$i
副本,所以最终长度可能是15或16。如果这不是你想要的,你应该这样做:
$fileNameNS = $i . $fileNameNS;
在循环结束后,用$i++
增加$i
,因此在循环内,$i
的值永远不会改变。如果您想在每次迭代中增加$i
,以便每次都添加不同的数字,则需要在循环内将其移动一行。然而,如果你这样做,那么$i
最终可能会超过一个数字,再次提高最终长度为16的可能性。
已经存在这样一个函数:
http://php.net/manual/en/function.str-pad.php正如我在你的循环中看到的,不需要每次都使用rand number,所以str_pad很合适。
你的while语句也不正确。
while (strlen($fileNameNS) < 15)
您希望它在strlen小于15时起作用
您也不需要在循环之外增加$i
。实际上可能需要将随机数生成器移动到循环中。
for ($i = 0, $str = ''; $i < 15; $i++) {
$str .= rand(1, 9);
}
$i = rand(1,9);
$file13 = $fileNameNS;
while (strlen($file13) <= 15){
$file13 = $i . $i . $fileNameNS;
$i++;
}