添加到字符串的开头,直到length = x


Append to beginning of string until length = x

我试图编写一个循环,将一个数字附加到字符串的开头,直到它是15个字符长。我错过了什么?

$i = rand(1,9);
while (strlen($fileNameNS > 15)){
    $file13 = $i . $i . $fileNameNS;
}
$i++;

在循环的每次迭代中,您修改$file13,但循环只查看$fileNameNS,它永远不会改变!因为它永远不会改变,如果循环条件最初为真,它将永远为真,并且永远不会退出。

也许你是这个意思:

$fileNameNS = $i . $i . $fileNameNS;

你的情况也在两个方面混淆了。

  1. 当长度小于预期长度时,您应该继续,而长度大于预期长度时,您正在继续。
  2. 当你应该对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++;
}