首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >str_getcsv转换为多维数组。

str_getcsv转换为多维数组。
EN

Stack Overflow用户
提问于 2011-12-02 15:45:16
回答 2查看 19.9K关注 0票数 22

我的csv值如下所示:

代码语言:javascript
复制
$csv_data = "test,this,thing
             hi,there,this
             is,cool,dude
             have,fun";

我想把整个CSV字符串读入一个多维数组,这样我就可以得到:

代码语言:javascript
复制
array(
   array(
      'test' => 'hi',
      'this' => 'there',
      'thing' => 'this'
   ),
   array(
      'test' => 'is',
      'this' => 'cool',
      'thing' => 'dude'
   ),
   array(
      'test' => 'have',
      'this' => 'fun',
      'thing' => ''
   )
);

我想要这样的输出,请注意CSV值是动态的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-02 16:04:02

假设CSV数据中的每一行都有相同的列数,这应该是可行的。

代码语言:javascript
复制
$lines = explode("\n", $csv_data);
$head = str_getcsv(array_shift($lines));

$array = array();
foreach ($lines as $line) {
    $array[] = array_combine($head, str_getcsv($line));
}

如果行的列数是可变的(如您的示例所示,其中最后一行有2列而不是3列),请使用以下循环:

代码语言:javascript
复制
foreach ($lines as $line) {
    $row = array_pad(str_getcsv($line), count($head), '');
    $array[] = array_combine($head, $row);
}
票数 37
EN

Stack Overflow用户

发布于 2011-12-02 16:11:20

这是一个非常干净和简单的解决方案:

代码语言:javascript
复制
function parse_row($row) {
  return array_map('trim', explode(',', $row));
}

$rows   = str_getcsv($csv_data, "\n");
$keys   = parse_row(array_shift($rows));
$result = array();

foreach ($rows as $row) {
  $row = parse_row($row);
  $row = array_pad($row, 3, NULL);

  $result[] = array_combine($keys, $row);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8353203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档