2012-06-12 75 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); 
相关问题