【问题标题】:PHP explode comma separated string into arrayPHP将逗号分隔的字符串分解为数组
【发布时间】:2023-03-29 23:45:01
【问题描述】:

假设我有一个包含以下数据的文本字段。以# 开头的行是 cmets。第一行是列标题,值用逗号分隔。

# 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'],
];

【问题讨论】:

标签: php arrays csv explode


【解决方案1】:

如果您首先将文本字段拆分为新行,则一次处理每一行。

忽略以#$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);

【讨论】:

  • (我已将该问题标记为骗子。肯定还有其他问题?这是给定问题的一个很好的整洁解决方案。很遗憾,这个问题不包括任何工作。这是一个“食谱”问题。)
  • @Progrock 骗子不处理注释行,因为它假设第一行是标题,因此不适用于 OP 问题中的示例。
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
相关资源
最近更新 更多