dポイントプレゼントキャンペーン実施中!

いつもお世話になります。
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列目のデータを抜き出して配列を作るにはどのようにすれば良いでしょうか?
よろしくご教示頂ければ幸いです。

A 回答 (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);

こういうことなのかなぁと。
    • good
    • 0
この回答へのお礼

> $line[2]は当然「配列ではない」ので
なるほど、そういうことですか・・・・・。

バッファを使った上のやり方で、将にやりたい結果を確認することができました。
しかし、私にとっては少し内容が高度なので、もう少し勉強します。
ありがとうございました。

お礼日時:2008/01/10 21:42

<?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);
?>
    • good
    • 0
この回答へのお礼

> echo $line[2] . "\n";
> とかやってみればわかると思うけど。
をやってみましたら、(縦に並ぶと思ったところ)、案に相違して「301 518 278 189」と半角スペースが空きました。

> 一回のechoで表示された内容じゃないからね。
は、分かっているのですが、なぜコンマがつかないのかが感覚的に理解できないでいます。
もう一度よく突っ込んで勉強することにします。
ありがとうございました。

お礼日時:2008/01/10 21:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!