Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.

Differences Between: [Versions 400 and 402]

   1  <?php
   2  
   3  namespace PhpOffice\PhpSpreadsheet\Calculation\TextData;
   4  
   5  use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
   6  use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcExp;
   7  use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
   8  use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
   9  
  10  class Search
  11  {
  12      use ArrayEnabled;
  13  
  14      /**
  15       * FIND (case sensitive search).
  16       *
  17       * @param mixed $needle The string to look for
  18       *                         Or can be an array of values
  19       * @param mixed $haystack The string in which to look
  20       *                         Or can be an array of values
  21       * @param mixed $offset Integer offset within $haystack to start searching from
  22       *                         Or can be an array of values
  23       *
  24       * @return array|int|string The offset where the first occurrence of needle was found in the haystack
  25       *         If an array of values is passed for the $value or $chars arguments, then the returned result
  26       *            will also be an array with matching dimensions
  27       */
  28      public static function sensitive($needle, $haystack, $offset = 1)
  29      {
  30          if (is_array($needle) || is_array($haystack) || is_array($offset)) {
  31              return self::evaluateArrayArguments([self::class, __FUNCTION__], $needle, $haystack, $offset);
  32          }
  33  
  34          try {
  35              $needle = Helpers::extractString($needle);
  36              $haystack = Helpers::extractString($haystack);
  37              $offset = Helpers::extractInt($offset, 1, 0, true);
  38          } catch (CalcExp $e) {
  39              return $e->getMessage();
  40          }
  41  
  42          if (StringHelper::countCharacters($haystack) >= $offset) {
  43              if (StringHelper::countCharacters($needle) === 0) {
  44                  return $offset;
  45              }
  46  
  47              $pos = mb_strpos($haystack, $needle, --$offset, 'UTF-8');
  48              if ($pos !== false) {
  49                  return ++$pos;
  50              }
  51          }
  52  
  53          return ExcelError::VALUE();
  54      }
  55  
  56      /**
  57       * SEARCH (case insensitive search).
  58       *
  59       * @param mixed $needle The string to look for
  60       *                         Or can be an array of values
  61       * @param mixed $haystack The string in which to look
  62       *                         Or can be an array of values
  63       * @param mixed $offset Integer offset within $haystack to start searching from
  64       *                         Or can be an array of values
  65       *
  66       * @return array|int|string The offset where the first occurrence of needle was found in the haystack
  67       *         If an array of values is passed for the $value or $chars arguments, then the returned result
  68       *            will also be an array with matching dimensions
  69       */
  70      public static function insensitive($needle, $haystack, $offset = 1)
  71      {
  72          if (is_array($needle) || is_array($haystack) || is_array($offset)) {
  73              return self::evaluateArrayArguments([self::class, __FUNCTION__], $needle, $haystack, $offset);
  74          }
  75  
  76          try {
  77              $needle = Helpers::extractString($needle);
  78              $haystack = Helpers::extractString($haystack);
  79              $offset = Helpers::extractInt($offset, 1, 0, true);
  80          } catch (CalcExp $e) {
  81              return $e->getMessage();
  82          }
  83  
  84          if (StringHelper::countCharacters($haystack) >= $offset) {
  85              if (StringHelper::countCharacters($needle) === 0) {
  86                  return $offset;
  87              }
  88  
  89              $pos = mb_stripos($haystack, $needle, --$offset, 'UTF-8');
  90              if ($pos !== false) {
  91                  return ++$pos;
  92              }
  93          }
  94  
  95          return ExcelError::VALUE();
  96      }
  97  }