PHP конвертирует CSV в конкретный формат JSON

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

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, чтобы каждый столбец в первой строке мог содержать массив, содержащий значения в одном столбце во всех остальных строках?

Solutions Collecting From Web of "PHP конвертирует CSV в конкретный формат JSON"

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

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

Компактное решение:

 <?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); 

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

Откройте fopen и проанализируйте с помощью 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);