* @package Vhs * @subpackage ViewHelpers\Math */ class AverageViewHelper extends AbstractMultipleMathViewHelper { /** * @return void */ public function initializeArguments() { parent::initializeArguments(); $this->overrideArgument('b', 'mixed', 'Optional: Second number or Iterator/Traversable/Array for calculation', FALSE, NULL); } /** * @return mixed * @throw Exception */ public function render() { $a = $this->getInlineArgument(); $b = $this->arguments['b']; $aIsIterable = $this->assertIsArrayOrIterator($a); $bIsIterable = $this->assertIsArrayOrIterator($b); if (TRUE === $aIsIterable && NULL === $b) { $a = $this->arrayFromArrayOrTraversableOrCSV($a); $sum = array_sum($a); $distribution = count($a); return $sum / $distribution; } elseif (TRUE === $aIsIterable && FALSE === $bIsIterable) { $a = $this->arrayFromArrayOrTraversableOrCSV($a); foreach ($a as $index => $value) { $a[$index] = $this->calculateAction($value, $b); } return $a; } elseif (TRUE === isset($a) && NULL === $b) { return $a; } return $this->calculate($a, $b); } /** * @param mixed $a * @param $b * @return mixed */ protected function calculateAction($a, $b) { return ($a + $b) / 2; } }