#php #csv
Вопрос:
это снова я. Я сделал свой код , чтобы попытаться сделать свой код для вычисления общей СУММЫ идентификатора, я написал этот код, но часть, в которой я получаю эхо этого $sumArray[$nameEmp] = $itemPacked; я не получаю общую СУММУ, я снова получаю отдельные номера идентификатора . Вместо общего числа 78 и 155 я получаю предметы в 3-й строке.. В чем моя ошибка ….
Заранее спасибо
<?php
$row = 1;
if (($handle = fopen("packing.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$row ;
$startTime = $data[Start];
$endTime = $data[Finish];
$itemPacked = $data[Item];
$nameEmp = $data[Employee];
$startParts = explode(":", $startTime);
$endParts = explode(":", $endTime);
$startMinute = (int)$startParts[1];
$startHour = (int)$startParts[0];
$endMinute = (int)$endParts[1];
$endHour = (int)$endParts[0];
$differenceHour = ($endHour - $startHour);
$differenceMinute = ($endMinute - $startMinute);
$differenceHour -= (($differenceMinute < 0) ? 1 : 0);
if ($differenceMinute < 0)
$differenceMinute = 60;
$difference = $differenceHour * 60 $differenceMinute;
$sumArray = array();
if (!isset($sumArray[$nameEmp])) {
$sumArray[$nameEmp] = 0; // create new entry for nameEmp with balance=0
echo "<br>n". $sumArray[$nameEmp] = $itemPacked ;// add balance for NameEmp
$pickedRate = $perMin * $itemPacked;
$perCal = $pickedRate / $difference *$precentEff;
echo $nameEmp. "amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;" . $itemPacked. "amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;" . round($perCal, 0) . "%" . "<br>";
}
}
fclose($handle);
}
?>
Output
Total for Each ID ID Item picked Perc
40 11 40 100%
3 23 32 80%
26 11 26 65%
12 11 12 75%
123 23 123 196%
Вместо этих выходных данных , которые у меня есть, мне нужен такой вывод
Total for Each ID ID Item picked Perc
11 40 100%
23 32 80%
11 26 65%
78 11 12 75%
155 23 123 196%
Комментарии:
1. Вы воссоздаете
$sumArray = array();
все заново в каждом цикле. Переместите это перед циклом while. Также следует отметить: вам не хватает кавычек на ваших первых 4$data
ключах, и если они не определены до этого цикла$perMin
и$precentEff
не определены.2. И повторять это внутри цикла while, вероятно, тоже не имеет смысла.
3. @aynber они определены , это не весь код , но когда я переместил $sumArray = массив(); я не получаю итог .
4. Вы изменяете его только в том случае, если он не определен. Таким образом, оно всегда будет равно первому значению.
5. теперь , когда я переместил echo за пределы цикла и переместил $sumArray = массив(); за пределы цикла до того, как я получу .. последние два-это сумма да, но почему я все еще получаю числа из 3-й строки 40 32 66 78 155