| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632 | 
							- <?php
 
- namespace PhpOffice\PhpSpreadsheet\Calculation;
 
- class Database
 
- {
 
-     /**
 
-      * fieldExtract.
 
-      *
 
-      * Extracts the column ID to use for the data field.
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param mixed $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      *
 
-      * @return null|string
 
-      */
 
-     private static function fieldExtract($database, $field)
 
-     {
 
-         $field = strtoupper(Functions::flattenSingleValue($field));
 
-         $fieldNames = array_map('strtoupper', array_shift($database));
 
-         if (is_numeric($field)) {
 
-             $keys = array_keys($fieldNames);
 
-             return $keys[$field - 1];
 
-         }
 
-         $key = array_search($field, $fieldNames);
 
-         return ($key) ? $key : null;
 
-     }
 
-     /**
 
-      * filter.
 
-      *
 
-      * Parses the selection criteria, extracts the database rows that match those criteria, and
 
-      * returns that subset of rows.
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return array of mixed
 
-      */
 
-     private static function filter($database, $criteria)
 
-     {
 
-         $fieldNames = array_shift($database);
 
-         $criteriaNames = array_shift($criteria);
 
-         //    Convert the criteria into a set of AND/OR conditions with [:placeholders]
 
-         $testConditions = $testValues = [];
 
-         $testConditionsCount = 0;
 
-         foreach ($criteriaNames as $key => $criteriaName) {
 
-             $testCondition = [];
 
-             $testConditionCount = 0;
 
-             foreach ($criteria as $row => $criterion) {
 
-                 if ($criterion[$key] > '') {
 
-                     $testCondition[] = '[:' . $criteriaName . ']' . Functions::ifCondition($criterion[$key]);
 
-                     ++$testConditionCount;
 
-                 }
 
-             }
 
-             if ($testConditionCount > 1) {
 
-                 $testConditions[] = 'OR(' . implode(',', $testCondition) . ')';
 
-                 ++$testConditionsCount;
 
-             } elseif ($testConditionCount == 1) {
 
-                 $testConditions[] = $testCondition[0];
 
-                 ++$testConditionsCount;
 
-             }
 
-         }
 
-         if ($testConditionsCount > 1) {
 
-             $testConditionSet = 'AND(' . implode(',', $testConditions) . ')';
 
-         } elseif ($testConditionsCount == 1) {
 
-             $testConditionSet = $testConditions[0];
 
-         }
 
-         //    Loop through each row of the database
 
-         foreach ($database as $dataRow => $dataValues) {
 
-             //    Substitute actual values from the database row for our [:placeholders]
 
-             $testConditionList = $testConditionSet;
 
-             foreach ($criteriaNames as $key => $criteriaName) {
 
-                 $k = array_search($criteriaName, $fieldNames);
 
-                 if (isset($dataValues[$k])) {
 
-                     $dataValue = $dataValues[$k];
 
-                     $dataValue = (is_string($dataValue)) ? Calculation::wrapResult(strtoupper($dataValue)) : $dataValue;
 
-                     $testConditionList = str_replace('[:' . $criteriaName . ']', $dataValue, $testConditionList);
 
-                 }
 
-             }
 
-             //    evaluate the criteria against the row data
 
-             $result = Calculation::getInstance()->_calculateFormulaValue('=' . $testConditionList);
 
-             //    If the row failed to meet the criteria, remove it from the database
 
-             if (!$result) {
 
-                 unset($database[$dataRow]);
 
-             }
 
-         }
 
-         return $database;
 
-     }
 
-     private static function getFilteredColumn($database, $field, $criteria)
 
-     {
 
-         //    reduce the database to a set of rows that match all the criteria
 
-         $database = self::filter($database, $criteria);
 
-         //    extract an array of values for the requested column
 
-         $colData = [];
 
-         foreach ($database as $row) {
 
-             $colData[] = $row[$field];
 
-         }
 
-         return $colData;
 
-     }
 
-     /**
 
-      * DAVERAGE.
 
-      *
 
-      * Averages the values in a column of a list or database that match conditions you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DAVERAGE(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DAVERAGE($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::AVERAGE(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DCOUNT.
 
-      *
 
-      * Counts the cells that contain numbers in a column of a list or database that match conditions
 
-      * that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DCOUNT(database,[field],criteria)
 
-      *
 
-      * Excel Function:
 
-      *        DAVERAGE(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return int
 
-      *
 
-      * @TODO    The field argument is optional. If field is omitted, DCOUNT counts all records in the
 
-      *            database that match the criteria.
 
-      */
 
-     public static function DCOUNT($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::COUNT(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DCOUNTA.
 
-      *
 
-      * Counts the nonblank cells in a column of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DCOUNTA(database,[field],criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return int
 
-      *
 
-      * @TODO    The field argument is optional. If field is omitted, DCOUNTA counts all records in the
 
-      *            database that match the criteria.
 
-      */
 
-     public static function DCOUNTA($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         //    reduce the database to a set of rows that match all the criteria
 
-         $database = self::filter($database, $criteria);
 
-         //    extract an array of values for the requested column
 
-         $colData = [];
 
-         foreach ($database as $row) {
 
-             $colData[] = $row[$field];
 
-         }
 
-         // Return
 
-         return Statistical::COUNTA(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DGET.
 
-      *
 
-      * Extracts a single value from a column of a list or database that matches conditions that you
 
-      * specify.
 
-      *
 
-      * Excel Function:
 
-      *        DGET(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return mixed
 
-      */
 
-     public static function DGET($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         $colData = self::getFilteredColumn($database, $field, $criteria);
 
-         if (count($colData) > 1) {
 
-             return Functions::NAN();
 
-         }
 
-         return $colData[0];
 
-     }
 
-     /**
 
-      * DMAX.
 
-      *
 
-      * Returns the largest number in a column of a list or database that matches conditions you that
 
-      * specify.
 
-      *
 
-      * Excel Function:
 
-      *        DMAX(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DMAX($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::MAX(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DMIN.
 
-      *
 
-      * Returns the smallest number in a column of a list or database that matches conditions you that
 
-      * specify.
 
-      *
 
-      * Excel Function:
 
-      *        DMIN(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DMIN($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::MIN(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DPRODUCT.
 
-      *
 
-      * Multiplies the values in a column of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DPRODUCT(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DPRODUCT($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return MathTrig::PRODUCT(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DSTDEV.
 
-      *
 
-      * Estimates the standard deviation of a population based on a sample by using the numbers in a
 
-      * column of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DSTDEV(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DSTDEV($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::STDEV(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DSTDEVP.
 
-      *
 
-      * Calculates the standard deviation of a population based on the entire population by using the
 
-      * numbers in a column of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DSTDEVP(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DSTDEVP($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::STDEVP(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DSUM.
 
-      *
 
-      * Adds the numbers in a column of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DSUM(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DSUM($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return MathTrig::SUM(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DVAR.
 
-      *
 
-      * Estimates the variance of a population based on a sample by using the numbers in a column
 
-      * of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DVAR(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DVAR($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::VARFunc(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
-     /**
 
-      * DVARP.
 
-      *
 
-      * Calculates the variance of a population based on the entire population by using the numbers
 
-      * in a column of a list or database that match conditions that you specify.
 
-      *
 
-      * Excel Function:
 
-      *        DVARP(database,field,criteria)
 
-      *
 
-      * @category Database Functions
 
-      *
 
-      * @param mixed[] $database The range of cells that makes up the list or database.
 
-      *                                        A database is a list of related data in which rows of related
 
-      *                                        information are records, and columns of data are fields. The
 
-      *                                        first row of the list contains labels for each column.
 
-      * @param int|string $field Indicates which column is used in the function. Enter the
 
-      *                                        column label enclosed between double quotation marks, such as
 
-      *                                        "Age" or "Yield," or a number (without quotation marks) that
 
-      *                                        represents the position of the column within the list: 1 for
 
-      *                                        the first column, 2 for the second column, and so on.
 
-      * @param mixed[] $criteria The range of cells that contains the conditions you specify.
 
-      *                                        You can use any range for the criteria argument, as long as it
 
-      *                                        includes at least one column label and at least one cell below
 
-      *                                        the column label in which you specify a condition for the
 
-      *                                        column.
 
-      *
 
-      * @return float
 
-      */
 
-     public static function DVARP($database, $field, $criteria)
 
-     {
 
-         $field = self::fieldExtract($database, $field);
 
-         if ($field === null) {
 
-             return null;
 
-         }
 
-         // Return
 
-         return Statistical::VARP(
 
-             self::getFilteredColumn($database, $field, $criteria)
 
-         );
 
-     }
 
- }
 
 
  |