PHP检查数组中是否存在文件

时间:2014-03-25 13:41:27

标签: php arrays file file-exists

我有一个查询,它根据Order_ID从数据库中获取一些文件名。许多文件可能与一个订单相关联。查询看起来像

$download2 = xtc_db_query("SELECT orders_products_filename FROM orders_products_download WHERE orders_id='".$last_order."'");
while ($activated2 = xtc_db_fetch_array($download2)) 
{

    $file = $activated2['orders_products_filename'];
    $pieces = explode(".zip", $file);
    print_r ($pieces);

    if(file_exists($pieces.'.zip'))
    { echo "1"; }
    if(!file_exists($pieces.'.zip'))
    { echo "2"; }

}

我想要做的是在文件存在与否时触发操作。由于$pieces是一个数组file_exists,因此假定整个数组是一个文件并且它不起作用(它总是回应2)。如果有人给我一个提示如何解决这个问题会很棒。

2 个答案:

答案 0 :(得分:4)

我认为你喜欢这样的事情:

foreach ($pieces as $piece) {
    if (file_exists($piece . '.zip')) {
        echo '1';
    } else {
        echo '2';
    }
}

或者也许在阵列上运行过滤器,以获取存在的文件列表,例如:

$existingFiles = array_filter(
    $pieces,
    function ($piece) { return file_exists($piece . '.zip'); }
);

答案 1 :(得分:0)

file_exists();需要绝对路径,确保传递绝对路径。

关于代码,我建议进行一些改进,尽管这与您要求的问题无关。

if(file_exists($pieces.'.zip')) { 
    echo "1"; 
}
if(!file_exists($pieces.'.zip')) { 
    echo "2"; 
}

你可以把它写成

if(file_exists($pieces.'.zip')) { 
    echo "1"; 
} else { 
    echo "2"; 
}

无需再调用file_exists两次。

如果您打算返回整数值,那么您可以尝试使用三元运算符。

echo file_exists($pieces.'.zip') ? 1 : 2;