1

これは、コーディングを支援するためのインターネットへの最初の投稿ですので、ご容赦ください。私は数年前からインターネットでオープンコードを見つけて、自分のやりたいことを実行するためにそれを改造してきましたが、これは非常に単純だと確信しています。よろしければお手数ですがよろしくお願いいたします。

私は次のページを持っています:

    <?php 
    $text = $_REQUEST['message'];
    $f = file_get_contents("all.txt"); 
    $f = explode(", ", $f); 

    function modFile($pos, $tothis, $inthis)
    { 
        foreach($inthis as $pos => $a){ 
        } 
        $newarr = implode("\r\n", $inthis); 
        $fh = fopen("example.txt", "w"); 
        fwrite($fh, $newarr); 
        fclose($fh); 
    } 

    modFile(4, '', $f); 

次のファイル(all.txt)があります。

    11111111111, 22222222222, 33333333333, 44444444444

私がこのように表示したいこと:

    11111111111 
    22222222222
    33333333333
    44444444444

スペースを追加してから、各番号の後にテキストを追加します。テキストは各行で同じです。

    11111111111 text here
    22222222222 text here
    33333333333 text here
    44444444444 text here

各行に追加するカスタムテキストを渡すhtmlフォームがあります。ファイルall.txtをそのままにして、新しくフォーマットしたファイルを別の名前で保存する必要があります。

現在「\r\ n」があるインプロードに変数を入れようとしましたが、これは機能しません。

どんな助けでも大歓迎です。

前もって感謝します!

4

2 に答える 2

2

コードに関するいくつかの注意事項:$pos関数に渡していますが、で上書きされますforeach。また、foreachは空なので、何に適していますか?そして、私はあなたがどこでも使用しているのを見ません$text

目的の出力を実現するには、代わりにこれを試してください。

file_put_contents(
    '/path/to/new.txt',
    preg_replace(
        '/[^\d+]+/',
        ' some text' . PHP_EOL,
        file_get_contents('all.txt')
    )    
);

パターン[^\d+]+は、連続した数字ではない任意の文字列と一致し、「テキスト」と改行に置き換えられます。

同じことを達成するやや複雑なバージョンは次のようになります。

file_put_contents(
    '/path/to/new.txt', 
    implode(PHP_EOL, array_map(
        function ($number) {
            $message = filter_var(
                $_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS
            );
            return sprintf('%s %s', trim($number), $message);
        },
        array_filter(str_getcsv(file_get_contents('/path/to/all.txt')))
    )
));

これは(裏返しから):

  • all.txtのコンテンツをロードし、CSV文字列として配列に解析します。各配列要素は数値に対応します。
  • これらの各番号には、POSTスーパーグローバルからのメッセージコンテンツが追加されます(REQUESTは使用しないでください)。
  • 結果の配列は、連結されて単一の文字列に戻され、連結文字は改行になります。
  • 結果の文字列は新しいファイルに書き込まれます。

上記を理解するのが難しすぎる場合は、temp varsを使用し、ラムダを使用しないバージョンを次に示します。

$allTxtContent = file_get_contents('/path/to/all.txt');
$numbers = array_filter(str_getcsv($allTxtContent));
$message = filter_var($_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS);
$numbersWithMessage = array();
foreach ($numbers as $number) {
    $numbersWithMessage[] = sprintf('%s %s', trim($number), $message);
};
$newString = implode(PHP_EOL, $numbersWithMessage);
file_put_contents('/path/to/new.txt', $newString);

同じことをします。

于 2012-08-11T12:21:50.990 に答える
0

foreach()の閉じ中括弧が間違った場所にあります。新しいファイル作成の実行を実行する正確な部分を見逃しました。ここ:

$text = $_REQUEST['message'];
$f = file_get_contents("all.txt"); 
$f = explode(", ", $f);
function modFile($pos, $tothis, $inthis, $text){ 
    $fh = fopen("example.txt", "w");
    foreach($inthis as $pos => $a){ 
        $newarr = $a." ".$text."\r\n";
        fwrite($fh, $newarr);
    }
    fclose($fh);
} 
modFile(4, "", $f, $text);

これは、新しいファイルを必要に応じてフォーマットするためのものですが、新しいファイルに追加する新しい$text['message']を渡していないことになります。mod_file()メソッドを変更するか、実行中にforeach()ループ内に渡すことができます。

編集*コード全体を更新しただけで、目的のコードになります。含まれている場合は、回答に承認済みのマークを付けてください。

于 2012-08-11T11:44:17.953 に答える