PHP 将 CSV 文件中的值放入数组中

标签 php arrays fopen fgetcsv array-push

我有一个包含两列的 CSV 文件。第一个是 ID 号,第二个是具有该 ID 的产品数量。 CSV 可以有同一 ID 的多个副本,我需要做的就是合并这些副本并将每个 ID 的产品数量添加在一起。

CSV 看起来像这样:

12345, 10
12345, 5
12345, 20
67890, 1
67890, 7
67890, 2

我需要它变成:

12345, 35
67890, 10

我想出的方法是创建一个多维数组,其中包含包含 ID 号的整体数组,并且每个数组都是包含产品数量的数组。然后将数组内的这些值相加。

但是,我正在努力将产品数量放入 ID 数组中。我目前正在使用它来创建数组:

$unique = array();
$file = fopen('test.csv', 'r');

while($row = fgetcsv($file, 0, ',', '\\')) {
    $unique[$row[0]] = true;
    array_push($unique[$row[0]], $row[1]);
}

$row[0] 作为唯一值添加到数组中,但是当我尝试将 $row[1] 插入 ID 数组时,出现错误,指出该值是 bool 值而不是数组,因为当我尝试在数组推送中使用 $row[0] 时,由于某种原因它变成了“1”而不是 ID。

我做错了什么?

最佳答案

您可以尝试以下操作:

$unique = array();
$file = fopen('test.csv', 'r');

while($row = fgetcsv($file, 0, ',', '\\')) {
    $unique[$row[0]][] = $row[1];
}
var_dump($unique);

这将提供如下输出:

  12345 => 
    array (size=3)
      0 => string ' 10 ' (length=4)
      1 => string ' 5 ' (length=3)
      2 => string ' 20 ' (length=4)
  67890 => 
    array (size=3)
      0 => string ' 1 ' (length=3)
      1 => string ' 7 ' (length=3)
      2 => string ' 2' (length=2)

编辑:如果您还想要 $row[1] 的总和,您可以在循环内尝试以下操作:

$unique[$row[0]] = !isset($unique[$row[0]]) ? (int)$row[1] : $unique[$row[0]] + (int)$row[1];

关于PHP 将 CSV 文件中的值放入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46890373/

相关文章:

php - 更改 PHP SoapClient 请求中的 namespace ?

ios - 如何在 Swift 4 中提取特定数组

php - 自从日期字符串与 WordPress 开始成为成员(member)?

php - Laravel 仅获取多对多关系中的数据透视列

C - 动态创建字符串数组(malloc)

c++ - fopen 和 Windows 控制台的问题

C:程序要求用户输入,即使输入文件作为参数给出

c++ - C++程序中打开的文件数

php - 使用 Symfony 和 FOSRestBundle 保存多对一关系

php pdo函数将结果作为数组传递并访问