【问题标题】:PHP parse .csv file into array and add up ONLY certain elements of certain rowsPHP 将 .csv 文件解析为数组并仅将某些行的某些元素相加
【发布时间】:2017-04-25 19:14:48
【问题描述】:

我有一个带有列标题的 csv 文件。我正在寻找的是,我怎样才能从列号中取出 数字。 9(货币金额)仅来自那些在第二列中包含“XYZxxxx”代码并将它们与仅指定的相同种类的货币相加的行在栏号中。 10

到目前为止,我的做法是:

  1. 将csv的内容解析成php数组。
  2. 将内容分解为不同的行。
  3. 检查包含“XYZxxxx”的行。

然后我就想不通了,如何从这些中取出货币的数量和货币的类型,然后用相同的类型相加。

我认为我可以分别查找“EUR”、“GBP”和“USD”值,并根据结果将行分组为不同的变量,但这是一种正确的方法还是我想多了?

【问题讨论】:

  • 请显示代码。

标签: php arrays loops csv currency


【解决方案1】:

一些简单的解决方案:

$array = [
    [10, 'DOLLAR'],
    [20, 'DOLLAR'],
    [25, 'EURO'],
    [20, 'DOLLAR'],
    [25, 'EURO'],
];

$sums = [];
foreach ($array as $item) {
    if (empty($sums[$item[1]])) {
        $sums[$item[1]] = $item[0];
    } else {
        $sums[$item[1]] += $item[0];
    }
}

echo'<pre>',print_r($sums),'</pre>';
//Array
//(
//    [DOLLAR] => 50
//    [EURO] => 50
//)

扩展示例:

$array = [
    [10, 'DOLLAR', 'XYZ1010'],
    [20, 'DOLLAR', 'ABC'],
    [25, 'EURO', 'XYZ1010'],
    [20, 'DOLLAR', 'XYZ1010'],
    [25, 'EURO', 'ABC'],
];

$sums = [];
foreach ($array as $item) {
    if (strpos($item[2], 'XYZ') !== false) {
        if (empty($sums[$item[1]])) {
            $sums[$item[1]] = $item[0];
        } else {
            $sums[$item[1]] += $item[0];
        }
    }
}

echo'<pre>',print_r($sums),'</pre>';
//Array
//(
//    [DOLLAR] => 30
//    [EURO] => 25
//)

不要创建大量名称为$dol$gbp 等的变量。使用带有键的单个数组。

【讨论】:

  • 我的问题是要得到的逻辑,直到我将过滤后的数组加起来。我想它像:eur=0,gbp=0,usd=0,“foreach 行,其中第 2 列的值为“XYZxxx”:如果 col no. 10 = EUR 那么 eur = eur+col no.9 值” ; elseif col no. 10 = GBP gbp = gbp+col no9 值;否则 usd = usd + col no.9 值。
  • 问题出在哪里?
  • 我不知道如何指定csv文件的这些列,我的意思是如何告诉php哪一个是当前行的哪一列。
  • 我还是不明白。你知道$array[index] 语法是什么意思吗?也许您在问题中添加了一些代码?
  • 我建议你打印你的多管理数组,看看你有什么。以及您可以使用哪些键从中获取值。
猜你喜欢
  • 2013-06-17
  • 2020-07-10
  • 2016-04-28
  • 1970-01-01
  • 2019-08-12
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多