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

いつもお世話になります。
tst.csv
aaa,bbbb,ccc
dd,eeeeeee,ffff,gg,hh
iii,jj
・・・・・
などのように
レコードごとにフィールド数の異なるcsvファイルの
各レコードの値を取得したいのですが、できなくて試行錯誤しています。
フィールドの数が同じならば
例えば、フィールド数が2ならば
$array = file("tst.csv");
$c = count($array);
$i=0;
while($i < $c){
$RowData=$array[$i];
list($fiel1,$fiel2) = split("\,",$RowData);
print('$fiel1='.$fiel1.' $fiel2'.$fiel2."<br>");
$i++;
}
とすればできます。

ところが、フィールド数がいくつあるかわからないので、
list($fiel1,$fiel2) = split("\,",$RowData);

list($fiel) = split("\,",$RowData);
としてforeachで値を取り出そうとしましたが、
foreach ($fiel as $Value) {
echo $value.'<br>';
}

Invalid argument supplied for foreach() というエラーが表示され
できません。
何が、Invalid argumentなのか見当がつきません。

各レコードの値を
$fiel[1]
$fiel[2]
$fiel[3]
などに格納することはできないものでしょうか。

おわかりになる方なにとぞよろしくお願いします。

A 回答 (3件)

PHPでは、変数名は大文字、小文字を区別します。



foreachで、$valueと$Valueとなってますが、これは別の変数です。
    • good
    • 0
この回答へのお礼

masa6272さん、どうもお手数をおかけしました。
大文字小文字の誤り。その通りでした。
どうも、すみません。
そして、ありがとうございました。

お礼日時:2008/06/07 14:25

splitは、分解した文字列を配列として返します。


list($fiel) = split("\,",$RowData);

$fiel = split("\,",$RowData);
にしてください。
動くはずです。
    • good
    • 0
この回答へのお礼

masa6272さん、お早ようございます。
返事遅くなり申し訳ありません。
試してみました。
$array = file($csv);
$c = count($array);
$i=0;
while($i < $c){
$RowData=$array[$i];
//list($fiel1,$fiel2) = split("\,",$RowData);
$fiel = split("\,",$RowData);
foreach ($fiel as $Value) {
echo '$i='.$i.$value.'<br>';
}
++$i;
}
$i=0
$i=0
$i=0
$i=1
$i=1
$i=1
$i=1
$i=1
$i=2
$i=2
となり、フィールドの数だけループされていることは確認できましたが
値が表示されません。
foreach ($fiel[] as $Value) {
とすると、Fatal error: Cannot use [] for reading in
foreach ($fiel[$i] as $Value) {
とすると、
Warning: Invalid argument supplied for foreach() in ・・・
と、なってしまいます。

お礼日時:2008/06/07 08:18

微妙にずれているかもしれませんがこんなかんじでしょうか?



<?
$fname="test.csv";
$handle = fopen($fname, "r");
while (($row = fgetcsv($handle,1024, ",")) !== FALSE) {
$fiel[]=$row;
}
fclose($handle);
print "<pre>";
print_r($fiel);
print "</pre>";
?>
    • good
    • 0

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