Linux box。
我需要帮助,试图找出如何让我的for循环将文件按数字顺序保存在它们被写入的目录中。
我有item1.php,item2.php等... 但当它到达item10.php时它将在item1.php之后,我发现保持它们顺序的唯一方法是在前9个文件前放置零。但是在代码中这并不容易。
我试过制作
for ($i = 01; $i < 45; ++$i) {
但&#34; 0&#34;被忽略了。
for ($i = 1; $i < 45; ++$i) {
if (!file_exists($dirPath . '/item'. $i . '.php')) {
// fopen, frwite, fclose...
$myfile = fopen($dirPath . '/item'. $i . '.php', "w") or die("Unable to open item$i file!");
$txt = "something to write";
fwrite($myfile, $txt);
fclose($myfile);
break;
}
}
感谢您的帮助。
鲍勃
答案 0 :(得分:2)
我不明白为什么目录中的顺序很重要,但如果你真的需要它,你可以使用类似的东西:
for ($i = 1; $i < 45; ++$i) {
$filename = $dirPath . '/item'. sprintf("%02s", $i) . '.php';
^ length of number you need, 2 in this case
if (!file_exists($filename)) {
$myfile = fopen($filename, "w") or die("Unable to open item$i file!");
// etc.
请参阅sprintf()
上的手册。
顺便说一下,我不建议写一个php文件,你可能会以这种方式引入安全风险。
答案 1 :(得分:1)
你可以做一个很直接的字符串垫。它会在前面添加零,但最多只能作为2位数的填充符,所以它会在01-09之后但不会在之后。
for($i = 1; $i < 45; ++$i) {
// The second digit (2) is how many characters it will pad in front so
// if you go past 2 digits, put it to 3 and it will be 001,002,003, etc...
// then in double digits it switches to 010,011, etc...
$i_mod = str_pad($i,2,0,STR_PAD_LEFT);
if(!file_exists($dirPath . '/item'. $i_mod . '.php')) {
// fopen, frwite, fclose...
$myfile = fopen($dirPath . '/item'. $i_mod . '.php', "w") or die("Unable to open item$i_mod file!");
$txt = "something to write";
fwrite($myfile, $txt);
fclose($myfile);
break;
}
}