• 締切済み

配列n番目のデータの取得をしたい。

初歩的な質問で恐縮です。 2次元配列形式で作った CSVファイル moromoro.txtがあります。 <?php $CsvData = fopen("./moromoro.txt","r"); $line=fgetcsv($CsvData,50,"\t"); print_r($line); ?> としてブラウザでみると Array ( [0] => abcd,efgh,kimn,qrst,uvwx)  とデータが入ります。ところが、データを取り出すため、 以下の通り4行目を追加しブラウザで見ても白いページだけになります。 01: <?php 02: $CsvData = fopen("./moromoro.txt","r"); 03: $line=fgetcsv($CsvData,50,"\t"); 04: list($aaa,$bbb)=$line; 05: return $aaa; 06: print_r($aaa); 076: ?>  ---------- 4行目以下を次のように変更しても 04: $ccc[]=$line[2]; 05: print_r($ccc); 06: ?> Array ( [0] => )  とだけが出てデータの取得が出来ません。何故でしょうか? どうすれば、配列n番目のデータを取り出すことができるでしょうか?

みんなの回答

回答No.6

こんにちわ♪ $line = Array ( [0] => abcd [1] => efgh [2] => kimn [3] => qrst [4] => uvwx ); であれば 06: $ccc[]=$line[0][2]; ↓↓↓↓↓↓↓↓↓↓↓↓ 06: $ccc[]=$line[2]; でどうでしょう? print_rのcは$line[0] = array(0=>a,1=>b,2=>c,3=>d); の[2]のcだと思います。 補足としては $line = abcd; これは $line[0] = a; $line[1] = b; $line[2] = c; $line[3] = d; と同じことなので。

spindle
質問者

お礼

ありがとうございます。 06: //print_r($line); 07: //$ccc[]=$CsvData[0][2]; 08: $ccc[]=$CsvData[2]; 09: print_r($ccc); 10: ?> としてブラウザで見ると、 06行目の出力結果 Array ( [0] => abcd [1] => efgh [2] => kimn [3] => qrst [4] => uvwx ) となりますが、 07行目の出力結果は Array ( [0] => 0 ) となり、 08行目の出力結果は Array ( [0] => a,b,c,d ) となってしまいます・・・・・・。

回答No.5

こんにちわ♪ 01: <?php 02: $CsvData = fopen("./moromoro.txt","r"); 03: $line=fgetcsv($CsvData,50,"\t"); 04: 05: 06: 076: ?>  ---------- 04: $ccc[]=$line[0][2]; 05: print_r($ccc); 06: ?> でどうでしょう?

spindle
質問者

お礼

#1,#2,#5様ありがとうございます。気合を入れ直して再度Tryし直しています。お陰さまでexplodeは出来ました。 01: <?php 02: $CsvData=fopen("./moromoro.csv","r"); 03: $line = explode(",",$CsvData[0]); 04: print_r($line); ←まず、このままだと、 05: // print_r($line[0][2]); 06: ?> 4行目を生かしたとき Array ( [0] => abcd [1] => efgh [2] => kimn [3] => qrst [4] => uvwx ) となります。 ところが、5行目を生かすと、 ‘c’ と頭から3番目のデータが出て、予定する’kimn’ が取得できないのです。 #5様の回答を参考に 4,5行目をコメントアウトし、6,7行を次のように挿入すると、 06: $ccc[]=$line[0][2]; 07: print_r($ccc); 08: ?> やはり、 Array ( [0] => c ) となるだけなのです・・・・。explodeが効いていない? #1様の回答番号No3の事情だと推定するのですが、解決法が分かりません。 どうすればクリアできるでしょうか。

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.4

#2です。 ヒントのつもりたったんですが・・・ そのCSVファイルがカンマ区切りなら、fgetcsvのパラメータが間違ってますよ。

  • nitho_t
  • ベストアンサー率49% (44/89)
回答No.3

#1です explode()の第2引数が関数定義と異なります。 PHPの配列は連想マップで実装されていますから配列の先頭と配列の先頭要素の指すデータの先頭は異なります。また一般にXとXの配列は別物です。

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

そのCSVファイルはカンマ区切りですよね!

spindle
質問者

お礼

ありがとうございます。 >そのCSVファイルはカンマ区切りですよね! はい、カンマ区切りになっています。 念のため、No1のお礼回答文で書いたスクリプト4行目以下を 04: $pieces = explode(",",$line); 05: var_dump($pieces); 06: ?> とカンマにしてみましたが、やはり白いページのままなのです・・・・。

  • nitho_t
  • ベストアンサー率49% (44/89)
回答No.1

>Array ( [0] => abcd,efgh,kimn,qrst,uvwx)  これは配列の0番目に文字列"abcd,efgh,kimn,qrst,uvwx"が入っているという意味ですから$line[2]は存在しません。 explode()で展開しましょう。

参考URL:
http://jp2.php.net/manual/ja/function.explode.php
spindle
質問者

お礼

ありがとうございます。下記のように explode() で試してみました。 01: <?php 02: $CsvData = fopen("./moromoro.txt","r"); 03: $line=fgetcsv($CsvData,50,"\t"); 04: $pieces = explode(" ",$line); 05: //print_r($line); 06: //print_r($pieces[2]); 07: echo $pieces[2]; 08: ?> 5行目を生かすと、 Array ( [0] => abcd,efgh,kimn,qrst,uvwx) と出ます。 ところが、6行目または7行目を生かすと、(マニュアルの例示の通りやっているつもりなのですが)、いずれの場合も白いページしか出ないのです。どこが悪いのでしょうか?

関連するQ&A