Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
<?php

namespace PhpOffice\PhpSpreadsheet\Calculation\LookupRef;

use PhpOffice\PhpSpreadsheet\Calculation\Exception;
< use PhpOffice\PhpSpreadsheet\Calculation\Functions;
> use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
abstract class LookupBase {
< protected static function validateIndexLookup($lookup_array, $index_number)
> /** > * @param mixed $lookup_array > */ > protected static function validateLookupArray($lookup_array): void
{
< // index_number must be a number greater than or equal to 1 < if (!is_numeric($index_number) || $index_number < 1) { < throw new Exception(Functions::VALUE());
> if (!is_array($lookup_array)) { > throw new Exception(ExcelError::REF()); > } > } > > protected static function validateIndexLookup(array $lookup_array, $index_number): int > { > // index_number must be a number greater than or equal to 1. > // Excel results are inconsistent when index is non-numeric. > // VLOOKUP(whatever, whatever, SQRT(-1)) yields NUM error, but > // VLOOKUP(whatever, whatever, cellref) yields REF error > // when cellref is '=SQRT(-1)'. So just try our best here. > // Similar results if string (literal yields VALUE, cellRef REF). > if (!is_numeric($index_number)) { > throw new Exception(ExcelError::throwError($index_number)); > } > if ($index_number < 1) { > throw new Exception(ExcelError::VALUE());
} // index_number must be less than or equal to the number of columns in lookup_array if ((!is_array($lookup_array)) || (empty($lookup_array))) {
< throw new Exception(Functions::REF());
> throw new Exception(ExcelError::REF());
} return (int) $index_number; } protected static function checkMatch( bool $bothNumeric, bool $bothNotNumeric,
< $notExactMatch,
> bool $notExactMatch,
int $rowKey, string $cellDataLower, string $lookupLower, ?int $rowNumber ): ?int { // remember the last key, but only if datatypes match if ($bothNumeric || $bothNotNumeric) { // Spreadsheets software returns first exact match, // we have sorted and we might have broken key orders // we want the first one (by its initial index) if ($notExactMatch) { $rowNumber = $rowKey; } elseif (($cellDataLower == $lookupLower) && (($rowNumber === null) || ($rowKey < $rowNumber))) { $rowNumber = $rowKey; } } return $rowNumber; } }