- ベストアンサー
PHPでcsvファイルデータ内の一行を修正したい
PHP4.3とcsvカンマ区切りのファイルデーターによる簡易会員サイトをつくっています。 複数行にわたってカンマ区切りのデーターがあり、その中のある一行の配列を修正したいのです。 Perlだとpushを使って配列に入れファイルに書き込めばいいのですがPHPではどのようにすればいいのでしょうか? ちなみに以下のように試みているのですがだめなのです。join(): Bad arguments.のエラーがでます。 Perl的なやり方でやってみたのですが。。。 while(($line = fgets($fp))){ list($DATE,$ID,$POINT,$NAME,$EMAIL,$TEL,$PREF,$SEX,$AGE,$blood,$body,$length,$type,$why,$PASS,$PROF,$BOX,$DAY_LIMIT,$A_ID,$MILE_POINT,)= split(",",$line); if($EMAIL == $_POST{"EMAIL"} && $PASS == $_POST{"PASS"}){ $HIT=1; $NOWPOINT=$POINT+$buypoint; $newline= "$DATE,$ID,$NOWPOINT,$NAME,$EMAIL,$TEL,$PREF,$SEX,$AGE,$blood,$body,$length,$type,$why,$PASS,$PROF,$BOX,$DAY_LIMIT,$A_ID,$MILE_POINT,\n"; $NEWSTOCK=join("\n",$newline); } else{ $NEWSTOCK=join("",$line); } } どなたかご教授いただけましたら幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>array_pushを使うほうがいいのでしょうか? >それともjoinを使うべきなのでしょうか? 望むようにされたらいいと思います。 join の結果は 配列ではなく、文字列です。 質問文の例で言えば $newline を作成した段階で、カンマ区切りの一行分の更新されたデータを作成しているのですから それをあらためてjoin する必要はないように思います。 それを、配列に溜め込んでいって、あとでまとめて出力するのであれば、array_push していけばいいと思います。 PHPの場合、 $array[]="1line"; $array[]="2line"; のように単に添字を指定しないで代入を繰り返せば $array[0]="1line"; $array[1]="1line"; のようになるので、その意味では取り立ててarray_push を使う必要はありません(参考URLにもそう書いてあります) 例えば、 … $NEWSTOCK[]=$newline; } else{ $NEWSTOCK[]=$line; … とでもすればいいんじゃないでしょうか
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
fgetcsv(),fputcsv()を活用なさるとよろしいかと。 http://www.php.net/manual/ja/function.fgetcsv.php http://www.php.net/manual/ja/function.fputcsv.php
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
join の第2引数は配列です。 http://jp.php.net/manual/ja/function.implode.php php での配列へのpush は、array_push です。 http://jp.php.net/manual/ja/function.array-push.php ファイル全体を配列に読み込むには file関数 を使います http://jp.php.net/manual/ja/function.file.php
お礼
join の第2引数は配列です。 http://jp.php.net/manual/ja/function.implode.php php での配列へのpush は、array_push です。 http://jp.php.net/manual/ja/function.array-push.php array_pushを使うほうがいいのでしょうか? それともjoinをつかうべきなのでしょうか?
お礼
ありがとうございました。 参考にします。