[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