• ベストアンサー

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); } } どなたかご教授いただけましたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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; … とでもすればいいんじゃないでしょうか

volvo850love
質問者

お礼

ありがとうございました。 参考にします。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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

volvo850love
質問者

お礼

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をつかうべきなのでしょうか?