Повторите PHP-код readdir - PullRequest
       56

Повторите PHP-код readdir

0 голосов
/ 08 января 2012

Возможно, это глупый вопрос, но я не смог решить его сам.

У меня есть следующий код:

<?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 Ответ

1 голос
/ 08 января 2012

Для повторного запуска кода вы всегда можете снова выполнить код.

В дополнение к этому вам необходимо переместить инициализацию текущих глобальных переменных из функции в глобальную область видимости, чтобы они моглиизменен при дополнительных повторениях вашего кода.

Вот ваш измененный код с некоторыми комментариями:

<?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);
?>
...