重复PHP readdir代码

时间:2012-01-07 22:06:31

标签: php html readdir opendir

也许这是一个愚蠢的问题,但我自己无法解决它。

我有以下代码:

<?php
    $path = "galeria01";
    $dir_handle = @opendir($path) or die("Not found: $path");
    list_dir($dir_handle,$path);

    function list_dir($dir_handle,$path)
    {
        global $div;
        $div = 001;
        global $zindex;
        $zindex = 200;
        global $margem;
        $margem = 114;
        while ((($file = readdir($dir_handle)) !== false)) {
            if ($file != "." && $file != ".." ) {
                echo PHP_EOL . '<div id="';
                echo str_pad($div, 3, 0, STR_PAD_LEFT);
                echo '" style="position:absolute;left:';
                echo $margem;
                echo 'px;z-index:';
                echo $zindex;
                echo '"><img src="galeria01/';
                echo $file;
                echo '" width="675" height="450" /></div>';
                echo'<span class="clear"></span>';
                $div++;
                $zindex--;
                $margem = $margem - 675;
            }
        }
    }
    closedir($dir_handle);
?>

如您所见,它会读取文件夹中的所有文件,并生成以下代码:

<div id="001" style="position:absolute;left:114px;z-index:200"><img src="001.jpg" width="675" height="450" /></div><span class="clear"></span>
<div id="002" style="position:absolute;left:-561px;z-index:199"><img src="002.jpg" width="675" height="450" /></div><span class="clear"></span>
<div id="003" style="position:absolute;left:-1236px;z-index:198"><img src="003.jpg" width="675" height="450" /></div><span class="clear"></span>
<div id="004" style="position:absolute;left:-1911px;z-index:197"><img src="004.jpg" width="675" height="450" /></div><span class="clear"></span></div>

我只需要重新运行代码几次并生成所有那些动态生成的div,再次以相同的顺序,但总是减少左边距和z-index值,如下所示:

    <div id="001" style="position:absolute;left:114px;z-index:200"><img src="001.jpg" width="675" height="450" /></div><span class="clear"></span>
                     (...)
    <div id="004" style="position:absolute;left:-1911px;z-index:197"><img src="004.jpg" width="675" height="450" /></div><span class="clear"></span></div>
    <div id="001" style="position:absolute;left:-2586px;z-index:196"><img src="001.jpg" width="675" height="450" /></div><span class="clear"></span>
                     (...)

我该怎么做?

我希望它很简单,你可以帮助我。

感谢。

1 个答案:

答案 0 :(得分:1)

要重新运行代码,您始终可以再次执行代码。

除此之外,您还需要将当前全局变量初始化从函数内部移动到全局作用域,以允许在代码的其他重新运行时修改它们。

以下是您修改过的代码,其中包含一些注释:

<?php
$path = ".";
$dir_handle = @opendir($path) or die("Not found: $path");

// do the init of these variables outside of the function and before the first call
global $zindex;
$zindex = 200;
global $margem;
$margem = 114;

// now call your function, it will behave like your original code
list_dir($dir_handle,$path);

// now call the your function again, it will pick up with the zindex/margem values of the last div you printed
list_dir($dir_handle,$path);

function list_dir($dir_handle,$path)
{
    global $div;
    $div = 001;
    global $zindex;
    // no longer set a new value for the zindex with each function call
    //$zindex = 200;
    global $margem;
    // no longer set a new value for the margem with each function call
    //$margem = 114;
    //reset the directory handle to the first position
    rewinddir($dir_handle);
    while ((($file = readdir($dir_handle)) !== false)) {
        if ($file != "." && $file != ".." ) {
            echo PHP_EOL . '<div id="';
            echo str_pad($div, 3, 0, STR_PAD_LEFT);
            echo '" style="position:absolute;left:';
            echo $margem;
            echo 'px;z-index:';
            echo $zindex;
            echo '"><img src="galeria01/';
            echo $file;
            echo '" width="675" height="450" /></div>';
            echo'<span class="clear"></span>';
            $div++;
            $zindex--;
            $margem = $margem - 675;
        }
    }
}
closedir($dir_handle);
?>