迭代两次并比较项


Iterate two whiles and compare items

嗨,我想比较一下,如果我在目录中的文件与我保存在db中的文件相同。这是我的代码,我不明白为什么它只迭代目录的第一项,而不是所有的:

$dir = opendir("galerias/programas");
    while ($elemento = readdir($dir)){
        if( $elemento != "." && $elemento != ".."){
            if( is_dir($path.$elemento) ){
                echo "<p><strong>CARPETA: ". $elemento ."</strong></p>";
            }else{
                while( $row = mysql_fetch_assoc($tabla1)){
                    if($row['imagen'] == $elemento){
                        echo $row['imagen'];
                        echo "<br>";
                    }
            }
        }
    }
}

您的内部while循环将只循环一次查询的所有结果。

如果你想再次遍历查询的所有结果,你必须在你的内部while循环之后使用mysql_data_seek($tabla1, 0);来倒带它们。

顺便说一下,旧的mysql_*函数在PHP中已被弃用,您应该考虑切换到PDO或mysqli_*

$dir = opendir("galerias/programas");
    while ($elemento = readdir($dir)){
        if( $elemento != "." && $elemento != ".."){
            if( is_dir($path.$elemento) ){
                echo "<p><strong>CARPETA: ". $elemento ."</strong></p>";
            }else{
                while( $row = mysql_fetch_assoc($tabla1)){
                    if($row['imagen'] == $elemento){
                        echo $row['imagen'];
                        echo "<br>";
                    }
            }
        }
    }
}

你可以修改:

if( $elemento != "." && $elemento != ".."){

:

if(!is_dir($elemento)){

但是您最好只是将数据库上的查询拉到数组中,然后将该数组与in_array()进行比较。这样你就可以解析出你的dir值,并对它们做任何你想做的事情。