省略基于if语句添加到数组

时间:2012-06-05 20:24:50

标签: php

即使$value['CardCode'] != $prevCode为false,此代码也会创建一个数组并添加属性“payment_sum”。您可以看到我正在打印测试值,最后一行509.85正确求和,但根据此if语句,应该省略之前的数组。

     if (($handle = fopen('upload/BEN-new.csv', "r")) === FALSE) {
            die('Error opening file'); 
         }

         $headers = fgetcsv($handle, 1024, ',');
         $cardCodes = array();
         $payments = array();
         $details = array ();

        while ($row = fgetcsv($handle, 1024, ",")) {
               $cardCodes[] = array_combine($headers, $row);
        }

            $prevCode = '';

            foreach ($cardCodes as $key => $value) {

                if ($value['CardCode'] != $prevCode) {
                    $payments['payment_sum'] = $value['InvPayAmnt'];
                }
                else {
                    $payments['payment_sum'] += $value['InvPayAmnt'];
                }

                    $prevCode = $value['CardCode'];
                    print_r ($payments);
            }
            fclose($handle);

打印...

   Array
     (
         [payment_sum] => 1055.40
     )

   Array
   (
         [payment_sum] => 550.00
   )

   Array
   (
         [payment_sum] => 100.00
    )

   Array
   (
        [payment_sum] => 287.33
   )
   Array
   (
       [payment_sum] => 509.85
   )

首选输出

   Array
     (
         [payment_sum] => 1055.40
     )

   Array
   (
         [payment_sum] => 550.00
   )

   Array
   (
         [payment_sum] => 100.00
    )

   Array
   (
       [payment_sum] => 509.85

         Array (
                  [currTotal] =>  287.33
                  [currTotal] =>  222.52
               )
   )

CSV

  BENV1072      1055.4
  BENV1073      550
  BENV5271      100
  BENV5635      287.33
  BENV5635      222.52

2 个答案:

答案 0 :(得分:1)

每次通过for循环,您都可以将$payments['payment_sum']设置为当前行的付款($value['InvPayAmnt']),或者将行的付款添加到总计中。由于前一个代码与除最后一行之外的所有代码的当前行代码不同,因此您将反复覆盖运行总计。只有最后一行添加到上一行的付款中,结果为509.85

您将$payments视为单值变量而不是数组,因为存储总计的键永远不会更改。您需要使用供应商ID作为密钥。

$payments = array();
foreach ($cardCodes as $key => $value) {
    $payments[$value['CardCode']] += $value['InvPayAmnt'];
}
print_r($payments);

<强>输出

Array
(
    [BENV1072] => 1055.4
    [BENV1073] => 550
    [BENV5271] => 100
    [BENV5635] => 509.85
)

您可以轻松地让$payments数组跟踪文件中的个别付款以及总数。

$payments = array();
foreach ($cardCodes as $key => $value) {
    $payments[$value['CardCode']]['payments'][] = $value['InvPayAmnt'];
    $payments[$value['CardCode']]['total'] += $value['InvPayAmnt'];
}
print_r($payments);

答案 1 :(得分:0)

我认为这是因为$value['CardCode']$prevCode都未定义或equivalent。我没有看到你在使用之前设置$prevCode的任何地方,即使它在你的if声明中。在代码的顶部,添加error_reporting(-1);,您可能会收到通知。