/** * AVERAGEIF * * Returns the average value from a range of cells that contain numbers within the list of arguments * * Excel Function: * AVERAGEIF(value1[,value2[, ...]],condition) * * @access public * @category Mathematical and Trigonometric Functions * @param mixed $arg,... Data values * @param string $condition The criteria that defines which cells will be checked. * @return float */ public static function AVERAGEIF($aArgs, $condition, $averageArgs = array()) { // Return value $returnValue = 0; $aArgs = self::flattenArray($aArgs); $averageArgs = self::flattenArray($averageArgs); if (count($averageArgs) == 0) { $averageArgs = $aArgs; } $condition = self::_ifCondition($condition); // Loop through arguments $aCount = 0; foreach ($aArgs as $key => $arg) { if (!is_numeric($arg)) { $arg = Calculation::_wrapResult(strtoupper($arg)); } $testCondition = '=' . $arg . $condition; if (Calculation::getInstance()->_calculateFormulaValue($testCondition)) { if (is_null($returnValue) || $arg > $returnValue) { $returnValue += $arg; ++$aCount; } } } // Return if ($aCount > 0) { return $returnValue / $aCount; } else { return self::$_errorCodes['divisionbyzero']; } }