变量是否可以作为要打开的文件名的一部分?

时间:2012-06-12 07:22:48

标签: php arrays

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”,具体取决于是否在haystack中找到了值。如果不为每个文件名执行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 个答案:

答案 0 :(得分:2)

你混淆了file_put_contents()的参数:

  

int file_put_contents(string $ filename,mixed $ data [,int $ flags = 0 [,resource $ context]])

所以你需要交换它们:

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);
}

答案 1 :(得分:1)

file_put_contents filename是第一个参数,数据是第二个。 file_put_contents

file_put_contents($filename, $file);