3

次のような CSV ファイルがあります。

Name, Id, Address, Place,
John, 12, "12 mark street", "New York",
Jane, 11, "11 bark street", "New York"...

私は約500列を持っています。これを JSON に変換したいのですが、出力は次のようになります。

{
    "name": [
        "John",
        "Jane"
    ],
    "Id": [
        12,
        11
    ],
    "Address": [
        "12 mark street",
        "12 bark street"
    ],
    "Place": [
        "New York",
        "New York"
    ]
}

PHP を使用して、最初の行の各列を他のすべての行の同じ列の値を保持する配列にするために、CSV ファイルを反復処理するにはどうすればよいですか?

4

3 に答える 3

5

これは、名前付き列の任意の量に対して有効な一般的な方法です。それらが静的である場合、それらに直接対処する方が短くなります

<?
$result = array();
if (($handle = fopen("file.csv", "r")) !== FALSE) {
    $column_headers = fgetcsv($handle); // read the row.
    foreach($column_headers as $header) {
            $result[$header] = array();
    }

    while (($data = fgetcsv($handle)) !== FALSE) {
        $i = 0;
        foreach($result as &$column) {

                $column[] = $data[$i++];
        }

    }
    fclose($handle);
}
$json = json_encode($result);
echo $json;
于 2013-06-13T20:45:50.807 に答える
0

コンパクトなソリューション:

<?php
$fp = fopen('file.csv', 'r');
$array = array_fill_keys(array_map('strtolower',fgetcsv($fp)), array());
while ($row = fgetcsv($fp)) {
    foreach ($array as &$a) {
        $a[] = array_shift($row);
    }
}
$json = json_encode($array);
于 2013-06-13T20:51:24.923 に答える