2013-05-17 3 views
3

У меня есть строка, как, которая создается с помощью fputcsvПреобразование CSV файлов данных в массив с помощью функции PHP str_getcsv

Date,Name,Hours 2013-01-02,"Test User",7:59 2013-01-03,"Test User",7:53 2013-01-04,"Test User",8:12 2013-01-07,"Test User",7:56 2013-01-08,"Test User",8:25 2013-01-09,"Test User",7:56 2013-01-10,"Test User",8:10 2013-01-11,"Test User",7:53 2013-01-14,"Test User",7:54 2013-01-15,"Test User",0:34 2013-04-01,"Test User",5:51 2013-04-02,"Test User",8:50 2013-04-03,"Test User",7:25 2013-04-04,"Test User",8:3 2013-04-05,"Test User","10:42:52[Not punch out]" ,Total,103:1 

, когда правильный заголовок (заголовок ('Content-тип:/CSV'); заголовок (» Content-Disposition: attachment; filename = "'. $ Filename.'" ');) Установлено, что он дает правильный файл csv.

Converting csv files data to an array using php str_getcsv

Но я хочу эту строку еще раз, чтобы быть преобразованы в формат массива, поэтому я попытался проходя над строкой, чтобы str_getcsv но получить массив как этот

Array 
(
    [0] => Date 
    [1] => Name 
    [2] => Hours 
2013-01-02 
    [3] => "Allen Herrera" 
    [4] => 7:59 
2013-01-03 
    [5] => "Allen Herrera" 
    [6] => 7:53 
2013-01-04 
    [7] => "Allen Herrera" 
    [8] => 8:12 
2013-01-07 
    [9] => "Allen Herrera" 
    [10] => 7:56 
2013-01-08 
    [11] => "Allen Herrera" 
    [12] => 8:25 
2013-01-09 
    [13] => "Allen Herrera" 
    [14] => 7:56 
2013-01-10 
    [15] => "Allen Herrera" 
    [16] => 8:10 
2013-01-11 
    [17] => "Allen Herrera" 
    [18] => 7:53 
2013-01-14...................... 

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

+0

Я думаю, что вам нужно 'взорваться()' 'это с помощью PHP_EOL' в качестве разделителя, а затем использовать каждую часть в' str_getcsv() ' –

ответ

3

После небольшого поиска получил решение по этому

$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $string_data)); 
print_r($data); 

Давая мне массив как этот

Array 
(
    [0] => Array 
     (
      [0] => Date 
      [1] => Name 
      [2] => Hours 
     ) 

    [1] => Array 
     (
      [0] => 2013-01-02 
      [1] => Test User 
      [2] => 7:59 
     ) 

    [2] => Array 
     (
      [0] => 2013-01-03 
      [1] => Test User 
      [2] => 7:53 
     ) 

    [3] => Array 
     (
      [0] => 2013-01-04 
      [1] => Test User 
      [2] => 8:12 
     ) 

    [4] => Array 
     (
      [0] => 2013-01-07 
      [1] => Test User 
      [2] => 7:56 
     ) 

    [5] => Array 
     (
      [0] => 2013-01-08 
      [1] => Test User 
      [2] => 8:25 
     ) 

    [6] => Array 
     (
      [0] => 2013-01-09 
      [1] => Test User 
      [2] => 7:56 
     ) 

    [7] => Array 
     (
      [0] => 2013-01-10 
      [1] => Test User 
      [2] => 8:10 
     )... 
2

Это будет что-то вроде:

$parts = explode(PHP_EOL, $string); 
$array = array(); 
foreach ($parts as $part) { 
    $array[] = str_getcsv($part); 
} 

print_r($array); 
+0

не проверял, но я думаю, что это Работа. –

+0

, если 'PHP_EOL' не работает, попробуйте разные разделители (' "\ n" ',' "\ r \ n" ',' "\ r" '). –

5
$file = file_get_contents("test.csv"); 
$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $file)); 
print_r($data); 
+0

Это не даст мне массив, как я точно хочу. –

+1

http://stackoverflow.com/questions/7502370/converting-csv-to-array –

2

я использую этот путь для преобразования данных csv-файлов t О массив: -

ini_set('auto_detect_line_endings', TRUE);/// (PHP's detection of line endings) write at the top. 


$csvrows = array_map('str_getcsv', file($filepath)); 
$csvheader = array_shift($csvrows); 
$csv = array(); 
foreach ($csvrows as $row) { 
    $csv[] = array_combine($csvheader, $row); 
} 
-1
$path = 'uploads/my_csvfile.csv'; 
$file_content = file_get_contents($path); 
$matches = array_map('str_getcsv', preg_split('/\r*\n+|\r+/',$file_content)); 
print_r($matches); 
+0

Пожалуйста, попробуйте это –