[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