. */ class SummationRow { var $data = array(); var $fieldsToSum = array(); var $hardCodedFields = array(); var $fieldList = array(); var $sumRow = array(); var $isSumRowAppended = false; /** * Pass in names of fields to sum */ function __construct() { $args = func_get_args(); foreach ($args as $arg) { $name_value = explode(':', $arg, 2); if (count($name_value) == 2) { $this->hardCodedFields[$name_value[0]] = $name_value[1]; } else { $this->fieldsToSum[] = $arg; } } } public function addEntry(&$entry) { // List of all the fields in a row if (empty($fieldList)) { $this->fieldList = array_keys($entry); } // Compute sum as we go foreach ($this->fieldsToSum as $field) { if (isset($entry[$field])) { // First value seen if (!isset($this->sumRow[$field])) { $this->sumRow[$field] = $entry[$field]; } else { $this->sumRow[$field] += $entry[$field]; } } } $this->data[] = $entry; } public function getTransformedData() { if (!$this->isSumRowAppended) { if (!empty($this->data)) { foreach ($this->fieldList as $field) { if (isset($this->hardCodedFields[$field])) { // Hardcoded values $this->sumRow[$field] = $this->hardCodedFields[$field]; } elseif (!isset($this->sumRow[$field])) { // Non-sum values $this->sumRow[$field] = ''; } } $this->data[] = $this->sumRow; } $this->isSumRowAppended = true; } return $this->data; } }