[PHP-users 3281] Re: csv から抜き出したフィールドの配列生成について

OGURA Junya php-users@php.gr.jp
Sat, 3 Nov 2001 15:53:19 +0900


小倉です。
Tetsuya Fukasawa <oliebol@nifty.com> wrote:
>ちなみに下記の例を見て思ったのですが(test.csv)、
>各行をfgetcsvとforを使うことで2番目のフィールドのみを
>全て追加で1つの配列として生成したい場合(1B,2B)、arrayなどを使って
>配列の追加をおこなっていけばいいんでしょうか?

任意のフィールドの配列が欲しい場合は、$csv の添字がフィールド
と対応していることを利用して、
 $a = $csv[1];
とすれば $a には2番目のフィールドの配列、すなわち(1B,2B)が
格納されます。
ただ、私が [PHP-users 3272] で書いたコードだと $csv の構造が、
 Array (
 [0] => Array ( [0] => 1A [1] => 2A )
 [1] => Array ( [0] => 1B [1] => 2B )
 [2] => Array ( [0] => 1C [1] => 2C )
 );
というように行・列が CSV の場合と逆になってしまうのにさっき
気づいたので、これを修正したコードも紹介しておきます。
$fp = fopen("test.csv", "r");
$i = 0;
while ($a = fgetcsv($fp, 1000, ',')) {
 for ($j = 0; $j < count($a); $j++) {
 $csv[$i][$j] = $a[$j];
 }
 $i++;
}
これだと $csv の構造が
 Array (
 [0] => Array ( [0] => 1A [1] => 1B [2] => 1C )
 [1] => Array ( [0] => 2A [1] => 2B [2] => 2C )
 )
となるので幾分使いやすくなるかと。
修正版で2番目のフィールドの配列を取得したい場合は、
for ($i = 0; $i < count($csv); $i++) {
 $a[] = $csv[$i][1];
}
とでもやってください。
-- 
OGURA Junya <junya@style.ne.jp>
fp : 717D 13BD FB8B C58C 5266 913B 6BD8 CB35 E27D A80E

AltStyle によって変換されたページ (->オリジナル) /