• ベストアンサー

配列をファイルに書き込む方法

下記($dataに入ってる)配列をファイルに書き込みたいのですが、書き込み方法が分かりません、教えていただけませんでしょうか・・・。 $dataの中身は Array ( [0] => あいうえお [1] => かきくけこ [2] => さしすせそ [3] => たちつてと ) これを $fp=fopen("1.txt","w"); fputs($fp,$data); fclose($fp); にするとArrayとだけ表示されます。 あいうえお\n かきくけこ\n さしすせそ\n たちつてと\n と書き込みたいのですが・・・、お願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

<?php $data = Array( 0 => 'あいうえお', 1 => 'かきくけこ', 2 => 'さしすせそ', 3 => 'たちつてと' ); $fp=fopen("1.txt","w"); foreach ($data as $a){ fputs($fp,$a."\n"); } fclose($fp); ?> ↑これでいかがでしょうか?

wggtanp
質問者

お礼

ありがとうございます、書き込むときに最後につけるんですね。 これで解決しました!

その他の回答 (1)

回答No.2

こんな方法もあります。 $fp=fopen("1.txt","w"); fputs(implode("\n",$fp),$data); fclose($fp); ただし、このままですと最後に改行がつかないので 最後に改行を追加したい場合はこうなります。 fputs(implode("\n",$fp) . "\n",$data);

参考URL:
http://jp.php.net/manual/ja/function.implode.php
wggtanp
質問者

お礼

implodeを使って配列の間につける方法知りませんでした。 参考になります、ありがとうございます!

関連するQ&A

  • 配列の差し替えについて

    配列について勉強をしています。 データを差し替えるプログラムを考えていて色々試してみたのですが 下記のような感じでうまく機能しません。 ・指定した箇所に追加書き込みになってしまう。 ・指定箇所が削除され別の箇所に追加書き込みになってしう。 ・まったく機能しなくなったりと困っています。 こんな感じのイメージ結果にしたいのですが・・・ -------------------------------------- dat.csvの中みが下記とします。 サンプル01 サンプル02 サンプル03 サンプル04 ↓↓↓↓↓実行結果↓↓↓↓↓ サンプル01 サンプル02 サンプル05 サンプル04 -------------------------------------- ソース -------------------------------------- 外部からの呼び出しで値が「サンプル03」です。 $edit_data=$_GET["sid"]; $test = "サンプル05"; if($_POST["regist"]){ $Data=file("data.csv"); for($i=0; $i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($edit_data==$line[1]){ array_splice($Data,$i,1,$test); $fp=fopen("data.csv","w"); flock($fp, LOCK_EX); foreach($Data as $item)fputs($fp,$item); fclose($fp); } } } -------------------------------------- まず、外部から「サンプル03」という値を呼び出し $edit_data==$line[1]でCSVデータと照合させました。 一致したらその箇所を「array_splice」で置換えるようにしているはずなんですが・・・ なんともうまく機能しません。。。。 どなたか、知恵を貸していただければと思い投稿させて頂きました。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 多次元配列のオーソドックスなファイル書き込みについて教えてください

    PHP勉強中のAJAMAです。 下記にありますようなプログラムによって配列構造を持った変数をCSVファイルに書き込み、一行を1レコードとして管理をしたいと考えています。書き込み処理は、一意である変数の場合は、きっちりと書き込まれるのですが、配列変数の部分はarrayと書き込まれてしまいます。配列変数の中身を書き込むには、join(",",$xxxx)とすることで、すべてを同じ一行に書き込むことができました。しかしこれですと、すべてが、,区切りの二次元構造になってしまうので、これらのデータを読み込んで活用したい場合に、多次元構造を把握する処理をしなくてはいけないように見えるのですが、どうにもその仕組みを思考することができないので、模範的な手法を教えていただけないでしょうか。 serialize()も試してみましたが、知識がオブジェクト指向にまでいたっていないこともあり、うまくいきませんでした。(実行環境がPHP4だからかもしれません) 以 下、作成中のソースコードです。                     ※$numから右が配列変数部 $lines=array("$recordID",$nickname,$date,$area,$num,$item,$size); $lines=implode(",",$lines); $lines=$lines."\n"; serialize($lines); ←試行して不成功だった加筆部分。 //CSVファイルに書き込み $fp=fopen("report.csv","a"); flock($fp, LOCK_EX); fputs($fp,$lines); fclose($fp); 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • これは・・・・

    $fp = fopen ($IMODEFILE, "w"); fputs($fp, $data); fclose($fp); がエラーにでるのですが・・・・ どうしたら解決できますか? 初心者ですいません・・・

    • 締切済み
    • PHP
  • ファイル出力で改行を入れたい!

    data.txtにファイル出力を行うのですが、gets(c)で入力した一語一語に改行を入れてdata.txtに出力したいのですがどうすればよいでしょうか。 返答のほどよろしくお願いいたします。 include<stdio.h> #define SIZE 20 void main(void) { char c[SIZE], *p; FILE *fp; fp = fopen("data.txt","w+"); p = c; while(gets(c) != NULL){ fputs(p,fp); } fclose(fp); printf("data.txtへ出力しました\n"); }

  • ファイルの読み書きでエラー

    下記のようなプログラムでファイルからデータを読み、 データを加工して、ファイルに書き込んでいます。 しかし、頻繁にアクセスがあると、読み出しのエラーや ファイルの中身が消えてしまう症状も発生します。 (ファイルの中身が消えるのは読み出し時にデータが 読めないからかも知れません) エラーをなくす為にはどうしたら良いのでしょうか? 教えて下さい。 $cmdata = file($cmfile); //ファイルからデータを読む  ・  ・(データの加工)  ・ $fp = @fopen($cmfile,"w+"); flock($fp,LOCK_EX); for( $i=0; $i<count($cmdata); $i++ ) { fputs($fp, $cmdata[$i]); } //ファイルにデータを書く flock($fp,LOCK_UN); fclose($fp);

    • 締切済み
    • PHP
  • 新しいファイルの書き込み ファイルができたり/出来なかったり 

    $fp3 = fopen("ent.txt,"w"); とオープンして fputsで書き込み fclose("ent.txt"); でクローズしています このプログラムをlocalhost/a.phpとかで実行すると 出力されるはずの、ent.txtファイルが exploreで見えないのです IEの更新ボタン(再実行?)を押すと ent.txtが見えます WindowXPにApacheとphpをインストールして 実行しています またこのルーチンを関数化して外部ファイルに置き 実行する時に、includeでもってくるように 変えましたが、ロジック上は問題ないと 思うんですが よろしくお願いします

    • ベストアンサー
    • PHP
  • MATLABで配列をファイルへ書き込む方法

    現在MATLABについて勉強しているのですが、配列M(N×N、Nは任意)をファイル(.txtなど)に書き込む方法が分からず困っています。 fid=fopen('matrix.txt','wt'); fprintf(fid,'%6.4f',M); fclose(fid); このように書いているのですが、全要素が1行に並んでしまいます。 N行N列の形で配列をファイルに出力したいのです。 どなたか初心者でも理解できるようご教授お願い致します。

  • ファイルに書き込む時の負荷について

    PHPバージョン5.2.4を使っています。 次のような // ------------------------------------ $fp = fopen("data.txt", "w"); $buf = ""; for ($i = 1; $i <= 3; $i++) { $buf .= "aaa$i\n"; } fwrite($fp, $buf); fclose($fp); // ------------------------------------ という変数にいったん保存してから書き込む場合と // ------------------------------------ $fp = fopen("data.txt", "w"); for ($i = 1; $i <= 3; $i++) { $buf = "aaa$i\n"; fwrite($fp, $buf); } fclose($fp); // ------------------------------------ というその都度ファイルに書き込む場合とでは どちらが良い悪いというのはあるのでしょうか? たとえばこちらのやり方は負荷がかかるなど ループが多くなっていった場合に違いがでてくるのでしょうか?

    • ベストアンサー
    • PHP
  • fscanf()

    fcanf()がうまくいきません。 画面には、42640888のような数値が表示されます。 どこが間違ってるか教えてください。 (test.txtに23と書いてあるとします。) #include<stdio.h> int main(void) {    FILE *fp;    FILE *fp1;    char str[10];    int a;    fp=fopen("test.txt","r")    fp1=fopen("a.txt","w")    while(!feof(fp)){       fgets(str,8,fp);       fputs(str,fp1);    }    fscanf(fp,"%d",&a);    printf("%d",a);   fclose(fp);   fclose(fp1);   return 0; }

  • ファイル名を複数個配列で確保したいときどうすればいいですか?

    int i; FILE *fp[5]; //ここの宣言がわかりません char *(filename[5])={"1.txt","2.txt","3.txt","4.txt","5.txt}; for(i=0;i<5;i++) fp[i]=fopen(filename[i],"w"); のようなことをしたいのですが、ファイル名を複数個配列に格納するにはどのようにしたらいいんでしょうか? 回答お願いします。

専門家に質問してみよう