2013-06-13 7 views
1

У меня есть файл CSV, который выглядит как:PHP преобразовать CSV в определенный формат JSON

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

У меня есть около 500 coloumns. Я хотел бы, чтобы преобразовать это в JSON, но я хочу, выход выглядеть следующим образом:

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

Использование PHP, как можно итерацию через файл CSV, так что я могу сделать каждый столбец в первой строке массива, который содержит значения в одном столбце во всех остальных строках?

+0

Я хотел бы использовать 'file_get_contents' для загрузки CSV, затем' взрываются ("", $ csvfile) 'затем манипулировать массивом, пока вы не получите его так, как хотите, и, наконец,' json_encode'. –

+0

Перечислить список, добавить к группам '$ output [" name "] [] = $ row [0];'. Покажите свою текущую попытку, если вам потребуется дополнительная консультация. – mario

ответ

4

это будет общий метод, который действителен для любого amoutn поименованных colums. , если они являются статическими, это будет короче, чтобы обращаться к ним напрямую

<? 
$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; 
0

Есть несколько полезных функций php, которые будут делать то, что вам нужно.

fouen и разобрать с fgetcsv.

Как только у вас есть массив, используйте * json_encode *, чтобы получить его в формате JSON.

Что-то подобное может работать (не проверено):

$results = array(); 
$headers = array(); 

//some parts ripped from http://www.php.net/manual/en/function.fgetcsv.php 
if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    $line = 0; 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      for ($x=0; $x < count($data); $c++) { 
       if ($line == 0) { 
        $headers[] = $data[$x]; 
       } 
       $results[$x][] = $data[$x]; 
      } 
    } 
    fclose($handle); 
} 

$output = array(); 

$x = 0; 
foreach($headers as $header) { 
    $output[$header] = $results[$x++]; 
} 

json_encode($output); 
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); 
Смежные вопросы