- 締切済み
配列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番目のデータを取り出すことができるでしょうか?
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- hirokiti99
- ベストアンサー率0% (0/2)
こんにちわ♪ $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; と同じことなので。
- hirokiti99
- ベストアンサー率0% (0/2)
こんにちわ♪ 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: ?> でどうでしょう?
お礼
#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)
#2です。 ヒントのつもりたったんですが・・・ そのCSVファイルがカンマ区切りなら、fgetcsvのパラメータが間違ってますよ。
- nitho_t
- ベストアンサー率49% (44/89)
- okmotokun
- ベストアンサー率59% (92/155)
そのCSVファイルはカンマ区切りですよね!
お礼
ありがとうございます。 >そのCSVファイルはカンマ区切りですよね! はい、カンマ区切りになっています。 念のため、No1のお礼回答文で書いたスクリプト4行目以下を 04: $pieces = explode(",",$line); 05: var_dump($pieces); 06: ?> とカンマにしてみましたが、やはり白いページのままなのです・・・・。
- nitho_t
- ベストアンサー率49% (44/89)
>Array ( [0] => abcd,efgh,kimn,qrst,uvwx) これは配列の0番目に文字列"abcd,efgh,kimn,qrst,uvwx"が入っているという意味ですから$line[2]は存在しません。 explode()で展開しましょう。
お礼
ありがとうございます。下記のように 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行目を生かすと、(マニュアルの例示の通りやっているつもりなのですが)、いずれの場合も白いページしか出ないのです。どこが悪いのでしょうか?
お礼
ありがとうございます。 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 ) となってしまいます・・・・・・。