電子書籍の厳選無料作品が豊富!

初歩的な質問で恐縮です。
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番目のデータを取り出すことができるでしょうか?

A 回答 (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;
と同じことなので。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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 ) となってしまいます・・・・・・。

お礼日時:2009/10/10 09:14

こんにちわ♪




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: ?>

でどうでしょう?
    • good
    • 0
この回答へのお礼

#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の事情だと推定するのですが、解決法が分かりません。
どうすればクリアできるでしょうか。

お礼日時:2009/10/03 15:00

#2です。



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

#1です



explode()の第2引数が関数定義と異なります。

PHPの配列は連想マップで実装されていますから配列の先頭と配列の先頭要素の指すデータの先頭は異なります。また一般にXとXの配列は別物です。
「配列n番目のデータの取得をしたい。」の回答画像3
    • good
    • 0

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/27 14:12

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

ありがとうございます。下記のように 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行目を生かすと、(マニュアルの例示の通りやっているつもりなのですが)、いずれの場合も白いページしか出ないのです。どこが悪いのでしょうか?

お礼日時:2009/09/27 10:42

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