이 코드는 $value['CardCode'] != $prevCode
이 false 인 경우에도 배열을 생성하고 'payment_sum'속성을 추가합니다. 테스트 값, 즉 509.85의 합계를 갖는 마지막 줄을 인쇄하고 있지만 배열은이 if
문에 따라 생략되어야합니다.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
왜 'BENV5635'전에 모든 지불금을 내고 있습니까? 예를 들어 입력 파일에'BENV5627 23.54'를 추가하면 "total"지불은'23.54'가됩니다. 그게 니가 원하는거야? –
나는 내가 잘 설명하지 않는다고 생각한다. 기본적으로 공급 업체 ID ie : BENxxxx에 의해이 배열을 그룹화하고 해당 그룹의 총 금액을 표시하려고합니다. 보시다시피 CSV의 마지막 2는 함께 그룹화되어 합계 509.85 만 표시되어야합니다. – user1413248
네, 그게 당신이 원했을 것이라고 생각하지만, 귀하의 결과와 일치하지 않습니다. –