2014-03-25 49 views
1

我有一個查詢,從基於Order_ID的數據庫中獲取一些文件名。許多文件可能與一個訂單相關聯。查詢看起來像PHP檢查文件是否存在從數組

$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)。如果有人給我一個提示如何解決這個問題,那將會很棒。

+1

你可以var_dump($ pieces)'?它是否只包含一個文件,而不是你可以通過'$ pieces [0]'來訪問它,否則你將需要一個循環。 – Rikesh

+0

爆炸將有索引數組中的數據,所以在file_exists()中傳遞數組將不起作用您需要傳遞數組元素而不是整個數組。 –

回答

2

我覺得你以後是這樣的:

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'); } 
); 
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 2倍。

如果你的意圖是返回整數值,那麼你可以嘗試三元運算符。

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