. */ require_once('CFDBTransform.php'); class AverageField implements CFDBTransform { /** * @var string field holding the value */ var $valueField; /** * @var string field to group by */ var $groupByField; /** * @var array of $groupByField => sum */ var $sums = array(); /** * @var array of $groupByField => count */ var $counts = array(); function __construct($valueField, $groupByField = null) { $this->valueField = $valueField; $this->groupByField = $groupByField; } public function addEntry(&$entry) { if (array_key_exists($this->valueField, $entry) && is_numeric($entry[$this->valueField])) { $value = $entry[$this->valueField]; $groupByName = empty($this->groupByField) ? $this->valueField : $entry[$this->groupByField]; if ($value !== null && $value !== '') { if (!array_key_exists($groupByName, $this->sums)) { $this->sums[$groupByName] = $value; $this->counts[$groupByName] = 1; } else { $this->sums[$groupByName] += $value; $this->counts[$groupByName]++; } } } } public function getTransformedData() { $data = array(); foreach (array_keys($this->sums) as $name) { $average = $this->sums[$name] / $this->counts[$name]; if (empty($this->groupByField)) { $data[] = array($this->valueField => $average); } else { $data[] = array($this->groupByField => $name, $this->valueField => $average); } } return $data; } }