2012-01-07 65 views
0

也许这是一个愚蠢的问题,但我无法自己解决它。重复PHP读取代码

我有以下代码:

<?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> 

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

<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到4比从1到4”?咦? – 2012-01-07 22:10:08

+2

(HTML id值不能以数字开头)。对于这种我通常称为朋友[mo-du-lus](http://php.net/manual/en/language.operators.arithmetic.php) 。 – hakre 2012-01-07 22:11:32

+1

同意,你的问题没有道理......也许你应该隔离问题并简化问题 – Prof83 2012-01-07 22:17:57

回答

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); 
?> 
+0

我能够理解你的想法,完全按照你所说的去做,但可惜的是,输出结果只会一次列出文件,就像以前一样。 我调用函数的次数并不重要,它只在HTML上列出一次。 – OleSchmitt 2012-01-08 11:49:02

+0

这是因为dir_handle指向第一个函数调用结束后的末尾。我修改了我在使用rewinddir()之前读取目录内容的答案...因此总是从头开始读取完整的目录树 – favo 2012-01-08 11:59:03

+0

是的!!!!!你摇滚,@favo!非常感谢。 – OleSchmitt 2012-01-08 12:40:44