2012-06-12 49 views
1

有什麼辦法在PHP中打開基於文件名變量的文件?基本上我想要的是:變量是否可以成爲要打開的文件名的一部分?

$file = file('data.txt'); 
$needle = array("one", "two", "three"); 
$haystack = array("one", "three"); 

foreach($needle as $value){ 
    $pos = strpos($haystack, $value); 

if($pos !== false){ 
    $filename = "$value.txt"; 
    file_put_contents($filename, $file); 
} 

$ needle的值是.txt文件的名稱。它一直運行到file_put_contents。 $ filename是無效的,我已經搜索瞭解決這個問題,並嘗試了所有我能想到的。我想加載數組值,用「.txt」擴展名錶示「one」作爲文件名,具體取決於在乾草堆中找到值。有沒有辦法做到這一點,而不是爲每個文件名做一個if語句?如果可能的話,我寧願用一個循環來處理它。

編輯交換參數。

編輯,新的代碼:

$data = file_get_contents('data.txt'); 
$needle = array("one", "two", "three"); 
$haystack = array("one", "three"); 
$files = array_intersect($needle, $haystack); 
foreach ($files as $value) { 
    $newfilename = "$value.txt"; 
    var_dump($newfilename); 
    file_put_contents($newfilename, $data); 
} 

回答

2

您混合起來file_put_contents()的參數:

INT file_put_contents(字符串$文件名,混合$數據[摘要$標誌= 0 [,資源$上下文]])

所以你需要更換他們:

file_put_contents($filename, $file); 

第二件事是,你正在做一個陣列上的strpos(),但功能(如它的名字一樣)字符串 - 你想要的是in_array():

foreach ($needle as $value) { 
    if (in_array($value, $haystack) { 
     $filename = "$value.txt"; 
     file_put_contents($filename, $file); 
    } 
} 

你甚至可以提高這個有點更多的是通過使用array_intersect() - 給你一個來自$ needle的所有值都在$ haystack中的數組。我認爲這是你問什麼,以避免if語句:

$files = array_intersect($needle, $haystack); 
foreach ($files as $value) { 
    $filename = "$value.txt"; 
    file_put_contents($filename, $file); 
} 
+0

謝謝。它仍然沒有把data.txt的內容放入one.txt和three.txt(在我的問題中的數組值中給出)。它就像$ filename =「$ value.txt」;不工作。 – user1447726

+0

也許在循環中添加一個'var_dump($ filename);',看看正確的文件名是否被回顯出來。 – Niko

+0

我懂了!謝謝!我作爲編輯發佈了我的最終代碼。 – user1447726

1

file_put_contents文件名是第一個參數,第二數據。 file_put_contents

file_put_contents($filename, $file); 
相關問題