用于循环以保持文件的顺序

时间:2014-10-11 23:19:22

标签: php

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;
    }
}

感谢您的帮助。

鲍勃

2 个答案:

答案 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;
            }
    }