【发布时间】:2017-10-23 13:18:47
【问题描述】:
我有一个包含两列的 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 数组时,我收到一条错误消息,指出该值是布尔值而不是数组,因为对于当我尝试在数组推送中使用 $row[0] 时,它会变成“1”而不是 ID。
我做错了什么?
【问题讨论】:
-
该值为布尔值,因为您将其设置为布尔值 (true)。您提供给 array_push 的不是数组,而是“真实”布尔值。而且我认为您不了解 array_push 的工作原理:它为数组的 end 添加了一个值。它不会影响数组 in 中的值。如果要将键/值对放入数组中,请使用 $array[$key] = $value。然后您可以使用该对来增加它(例如,$array[$key] += $value)。
标签: php arrays fopen fgetcsv array-push