如何使用第一个值作为键将CSV解析为数组?

时间:2010-08-05 14:13:33

标签: php arrays csv key

所以我有一个看起来像这样的CSV文件:

12345, Here is some text
20394, Here is some more text

如何将其插入到看起来像这样的数组中

$text = "12345" => "Here is some text",
        "20394" => "Here is some more text";

这是我目前必须在单层CSV上获得单个基于数字的值

      if ($handle = fopen("$qid", "r")) {

          $csvData = file_get_contents($qid);
          $csvDelim = "\r";

          $qid = array();
          $qid = str_getcsv($csvData, $csvDelim);

      } else {

          die("Could not open CSV file.");

      }

感谢您的回复,但我仍然看到了一个潜在的问题。使用这些解决方案,值不会以这种方式存储:

$array[0] = 12345
$array[1] = Here is some text 20394
$array[2] = Here is some more text

如果我在上面的示例csv上尝试过这个,那么数组将如何构建?

5 个答案:

答案 0 :(得分:11)

您可以使用fgetcsv()将文件中的行读入数组。所以像这样:

$a = array();
$f = fopen(....);
while ($line = fgetcsv($f))
{
    $key = array_shift($line);
    $a[$key] = $line;
}
fclose($f);
var_dump($a);

答案 1 :(得分:3)

假设CSV文件中的第一行包含列标题,这将为每行的数据创建一个关联数组:

$filepath = "./test.csv";
$file = fopen($filepath, "r") or die("Error opening file");
$i = 0;

while(($line = fgetcsv($file)) !== FALSE) {
    if($i == 0) {
        $c = 0;
        foreach($line as $col) {
            $cols[$c] = $col;
            $c++;
        }
    } else if($i > 0) {
        $c = 0;
        foreach($line as $col) {
            $data[$i][$cols[$c]] = $col;
            $c++;
        }
    }
    $i++;
}

print_r($data);

答案 2 :(得分:0)

如果您正在阅读文件我可以推荐使用类似fgetcsv()的内容 这会将CSV中的每一行读入一个包含所有列作为值的数组。

http://at2.php.net/fgetcsv

答案 3 :(得分:0)

$csv_lines = explode('\n',$csv_text);
foreach($csv_lines as $line) {
  $csv_array[] = explode(',',$line,1);
}

编辑 - 基于原始问题后发布的代码:

  if ($handle = fopen("$qid", "r")) {

      $csvData = file_get_contents($qid);
      $csvDelim = "\r"; // assume this is the line delim?

      $csv_lines = explode($csvDelim,$csvData);
      foreach($csv_lines as $line) {
        $qid[] = explode(',',$line,1);
      }

  } else {

      die("Could not open CSV file.");

  }

答案 4 :(得分:0)

如果你的新文件有两列,$ qid应该成为一个数组,每行有两个值。

$csvDelim = ",";
$qid = str_getcsv($csvData, $csvDelim);
$text[$qid[0]] = $qid[1];