PHPで名前を展開し、.CSVファイルに書き戻すのに役立ちます

csv explode fputcsv fwrite php
PHPで名前を展開し、.CSVファイルに書き戻すのに役立ちます

フルネームを.csvファイルから名、ミドルネーム、ラストネームに分割するために、以下のコードを書きました。 うまく機能し、次のような出力が得られます。

Eric,T.,Nolan
Mary,,Worth
Jim,T.,Lane
E.,Thomas,Powell
William,Reilly,Smith
Johnny,,Depp
Stevie,de,la Soul

画面に印刷することはできますが、コンマで区切られた3つのフィールド(つまり、firstname、middlename、lastname)を持つ新しい.csvファイルに戻すのに助けが必要です。 fwriteとfputcsvのどちらを使用すべきかわからない。 名前を分割するためだけに長い時間がかかりましたが、今では新しいcsvファイルに書き戻すことに固執しています。 教祖の助けをいただければ幸いです。 皆さんありがとう!

これが私のコードです:

  2  0


ベストアンサー

スプーンで食べさせてしまうリスクがあるので、すべてやり直すことにしました。 あなたのコードは、新しいプログラマーの特徴を示しています(違反はありません)。

私のコードとあなたのコードを比較してください。 あなたは `list`を間違って使用し、不必要にループし、不要なカウンターをインクリメントしていました。いくつかの問題を挙げます。

これは、入力ファイルが実際のCSVファイルではなく、1行に1つの名前を持つファイルであるという仮定に依存します。 この結論を導き出す際に、コードを誤って解釈した可能性があります。

$file = fopen('nameFile.csv', 'r');

while (($line = fgets($file)) !== FALSE)
{
    $names_array[] = trim($line); // trim whitespace at the begining and end of each line, in this case the EOL character(s)
}

fclose($file);

$output_file = fopen('/var/tmp/output.csv', 'w');  // this will clobber the file output.csv  use 'a' instead of 'w' if you want to add to an existing file

foreach ($names_array as $name)
{
    $processed_name = explode(' ', $name, 3); // split the name, based on spaces

    // not all full names contain a middle name
    if (!isset($processed_name[2]))
    {
        $processed_name[2] = $processed_name[1];
        $processed_name[1] = null;
    }

    // output each line into a CSV file
    fputcsv($output_file, $processed_name);
}

fclose($output_file);

1


最後の1つは正しく見えません。 「Stevie de la Soul」、姓は「de la Soul」、ミドルネームは空にする必要があります。 また、人々が姓を持っていない多くの文化があります。

いずれにしても、CSVをファイルに書き戻すには、http://www.php.net/manual/en/function.fputcsv.php [fputcsv()]関数を使用します。 これは、http://www.php.net/manual/en/function.fgetcsv.php [fgetcsv()]のマニュアルページに「see alse」としてリストされています。

0


タイトルとURLをコピーしました