PHP将.csv文件解析为数组并仅添加某些行的某些元素

时间:2016-12-10 11:45:31

标签: php arrays loops csv currency

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

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

  1. 将csv的内容解析为php数组。
  2. 将内容分解为不同的行。
  3. 检查包含“XYZxxxx”的行。
  4. 然后我无法弄清楚,如何从这些中取出货币的数量和货币的类型,并用相同的类型加总。

    我想我可以分别查看“EUR”,“GBP”和& “USD”值并根据结果将行分组为不同的变量,但这是一种正确的方法还是我过度思考它?

1 个答案:

答案 0 :(得分: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等名称创建大量变量。使用带锁的单个数组。