PHP взорвать строку через запятую в массив - PullRequest
0 голосов
/ 14 февраля 2019

Допустим, у меня есть текстовое поле со следующими данными.Строки, начинающиеся с #, являются комментариями.Первая строка - это заголовки столбцов, а значения разделяются запятыми.

# some instruction
# some instruction
Day,Open,Close
Monday,09:00,17:00
Tuesday,09:00,18:00

Как мне это разобрать, чтобы получить такой массив:

$openingTimes = [
   ['Day' => 'Monday', 'Open' => '09:00', 'Close' => '17:00'],
   ['Day' => 'Tuesday', 'Open' => '09:00', 'Close' => '18:00'],
];

1 Ответ

0 голосов
/ 14 февраля 2019

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

Игнорировать все, что начинается с # (бит $line[0] == '#').

Используйте str_getcsv(), чтобы разбить строку на отдельные поля (с учетом полей в кавычках и т. Д.). Затем, если заголовка еще не было, сохраните это значение разделения в качестве заголовка.Если был заголовок, добавьте эти новые данные как часть выходных данных, комбинируя их с array_combine() ...

$input = '# some instruction
# some instruction
Day,Open,Close
Monday,09:00,17:00
Tuesday,09:00,18:00';

$lines = explode(PHP_EOL, $input);
$header = null;
$output = [];
foreach ( $lines as $line ) {
    if ( $line[0] == '#' )  {
        continue;
    }
    $data = str_getcsv($line);
    if ( $header == null )  {
        $header = $data;
    }
    else    {
        $output[] = array_combine($header, $data);
    }
}

print_r($output);
...