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 拡張子をファイル名として付けた「1」などの配列値をロードします。ファイル名ごとに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);

2 つ目は、配列に対して strpos() を実行しているが、その関数は (その名前が示すように) 文字列用であることです。必要なのは in_array() です。

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

array_intersect() を使用して、これをさらに強化することもできます。これにより、$haystack にもある $needle からのすべての値の配列が得られます。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 ファイル名は最初の引数、データは 2 番目の引数です。file_put_contents

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