• ベストアンサー

2次元配列から1次元配列へのデータ読み込み方法をお尋ねします。

いつもお世話になります。 readtest.csvというCSVファイルを作り、データを次のように入れています。 a,apple,301,23 b,orange,518,47 c,grape,278,19 d,banana,189,36 この3列目のデータを取り出して1次元配列に入れるため、DBtest.phpを次のように書きました。 01: <?php 02: $Data=file("../readtest.txt"); 03: for ( $i = 0; $i < sizeof( $Data ); $i++ ) { 04: $line=explode(",",$Data[$i]); 05: echo $line[2]; // 301518278189 06: // $xdata=implode(",", $line[2]); 07: } 08: ?> この実行結果は、「301518278189」となります。なぜコンマが入らないのでしょうか? 5行目をコメントアウトして6行目を生かして実行すると、 Warning: implode() [function.implode]: Bad arguments. in C:\Program Files\Apache Group\Apache2\htdocs\DBtest.php on line 6 となります。 3列目のデータを抜き出して配列を作るにはどのようにすれば良いでしょうか? よろしくご教示頂ければ幸いです。

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

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

// fileを$Dataに格納 $Data=file("../readtest.txt"); for ( $i = 0; $i < sizeof( $Data ); $i++ ) {  // $i行目のデータをカンマで区切り$lineに格納  $line=explode(",",$Data[$i]);  // $lineの3番目のデータをecho  echo $line[2];  // ←? $lineの3番目のデータをカンマで結合しようとしてる  $xdata=implode(",", $line[2]); } $line[2]は当然「配列ではない」のでimplodeで結合しようとしても空振りに終わるだけです。 Bad argmentsと怒られているのはそのせいです。 おそらくやりたいこととしては // $buffer: 取っておきたい3番目のデータを一時的に格納するバッファ $buffer = array(); $Data=file("../readtest.txt"); for ( $i = 0; $i < sizeof( $Data ); $i++ ) {  $line=explode(",",$Data[$i]);  $buffer[] = $line[2]; } echo implode(',',$buffer); こういうことなのかなぁと。

spindle
質問者

お礼

> $line[2]は当然「配列ではない」ので なるほど、そういうことですか・・・・・。 バッファを使った上のやり方で、将にやりたい結果を確認することができました。 しかし、私にとっては少し内容が高度なので、もう少し勉強します。 ありがとうございました。

その他の回答 (1)

回答No.1

<?php /* >この実行結果は、「301518278189」となります。なぜコンマが入らないのでしょうか? コードどおりなので,何を悩んでいるのか回答者としては良く理解できない。 言っておくけど,一回のechoで表示された内容じゃないからね。 echo $line[2] . "\n"; とかやってみればわかると思うけど。 で,さらに何のためにimplode関数を使おうとしているのか良く解らん。 */ $array = array(); /* ファイル名が説明文と一致しないので修正 */ $Data=file("./readtest.csv"); for ( $i = 0; $i < sizeof( $Data ); $i++ ) { $line=explode(",",$Data[$i]); array_push($array,$line[2]) ; } print_r($array); ?>

spindle
質問者

お礼

> echo $line[2] . "\n"; > とかやってみればわかると思うけど。 をやってみましたら、(縦に並ぶと思ったところ)、案に相違して「301 518 278 189」と半角スペースが空きました。 > 一回のechoで表示された内容じゃないからね。 は、分かっているのですが、なぜコンマがつかないのかが感覚的に理解できないでいます。 もう一度よく突っ込んで勉強することにします。 ありがとうございました。

関連するQ&A