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 作为文件名,具体取决于是否在大海捞针中找到了该值。有没有办法在不为每个文件名做 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);
}
4

2 回答 2

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);
}
于 2012-06-12T07:28:26.717 回答
1

file_put_contents 文件名是第一个参数,第二个是数据。file_put_contents

file_put_contents($filename, $file);
于 2012-06-12T07:27:53.050 回答