2

このコードは配列を作成し、false の場合でも属性「payment_sum」を追加します$value['CardCode'] != $prevCode。テスト用に値を出力していることがわかります。最後の行では 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
4

2 に答える 2

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);
于 2012-06-05T20:54:52.840 に答える
0

$value['CardCode']との両方$prevCodeが undefined または equalあるためだと思います。ステートメントに記載$prevCodeされていても、使用する前に設定した場所はわかりません。ifコードの先頭に置くerror_reporting(-1);と、通知が表示される可能性があります。

于 2012-06-05T20:32:01.773 に答える