いつもお世話になります。
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]
などに格納することはできないものでしょうか。
おわかりになる方なにとぞよろしくお願いします。
No.2
- 回答日時:
splitは、分解した文字列を配列として返します。
list($fiel) = split("\,",$RowData);
を
$fiel = split("\,",$RowData);
にしてください。
動くはずです。
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 ・・・
と、なってしまいます。
No.1
- 回答日時:
微妙にずれているかもしれませんがこんなかんじでしょうか?
<?
$fname="test.csv";
$handle = fopen($fname, "r");
while (($row = fgetcsv($handle,1024, ",")) !== FALSE) {
$fiel[]=$row;
}
fclose($handle);
print "<pre>";
print_r($fiel);
print "</pre>";
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Smartyでインクリメント
-
元号の表示
-
php 2つの配列の内、片方を元に...
-
多次元配列を、1次元の配列にす...
-
PHPで、'=>'の意味が分かりませ...
-
PHPでこのコード自体に意味は無...
-
SELECT 使用時の bindValue の...
-
3つの連想配列を交互に代入し...
-
マッチング処理(1:N)
-
思うような連想配列ができない・・
-
プルダウンメニューにDBの内容...
-
配列をループでたくさん宣言し...
-
[PHP] fputcsv()関数でファイル...
-
doxygenを使用する環境について
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
unset使用時の利点
-
php で1から100までの素数の表...
-
C言語 最大値と最小値を求めて...
-
String だと「 ByRef引数の型が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
マッチング処理(1:N)
-
foreachで上限回数指定方法また...
-
PHP、{}記号の意味
-
PHPで変数名にハイフンを使うに...
-
PHPで連想配列のプルダウンメニ...
-
VB.NET で 二次元のハッシュは...
-
多次元配列を、1次元の配列にす...
-
配列からプルダウン用のHTMLを生成
-
Smartyでインクリメント
-
phpでforeachの中にforeachがあ...
-
foreachとかの勝手な省略?
-
Excel VBAでフィルター後の対象...
-
foreachで配列を、左から縦3列...
-
$_POST受信で必要項目のみを結...
-
リストボックス複数選択抽出方法
-
POSTで渡されるデータの数がわ...
-
ftokが動かない?
-
foreachの間にテーブルの<TR>を...
-
3つの連想配列を交互に代入し...
おすすめ情報