可以说我有一个包含以下数据的文本字段。以#
开头的行是注释。第一行是列标题,值以逗号分隔。
# 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'],
];
答案 0 :(得分:3)
如果您首先用新行将文本字段分割开,然后一次处理每一行。
忽略任何以#
($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);