init
This commit is contained in:
commit
72a26edcff
22092 changed files with 2101903 additions and 0 deletions
97
lib/PhpSpreadsheet/Calculation/TextData/Search.php
Normal file
97
lib/PhpSpreadsheet/Calculation/TextData/Search.php
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheet\Calculation\TextData;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcExp;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
|
||||
|
||||
class Search
|
||||
{
|
||||
use ArrayEnabled;
|
||||
|
||||
/**
|
||||
* FIND (case sensitive search).
|
||||
*
|
||||
* @param mixed $needle The string to look for
|
||||
* Or can be an array of values
|
||||
* @param mixed $haystack The string in which to look
|
||||
* Or can be an array of values
|
||||
* @param mixed $offset Integer offset within $haystack to start searching from
|
||||
* Or can be an array of values
|
||||
*
|
||||
* @return array|int|string The offset where the first occurrence of needle was found in the haystack
|
||||
* If an array of values is passed for the $value or $chars arguments, then the returned result
|
||||
* will also be an array with matching dimensions
|
||||
*/
|
||||
public static function sensitive(mixed $needle, mixed $haystack, mixed $offset = 1): array|string|int
|
||||
{
|
||||
if (is_array($needle) || is_array($haystack) || is_array($offset)) {
|
||||
return self::evaluateArrayArguments([self::class, __FUNCTION__], $needle, $haystack, $offset);
|
||||
}
|
||||
|
||||
try {
|
||||
$needle = Helpers::extractString($needle);
|
||||
$haystack = Helpers::extractString($haystack);
|
||||
$offset = Helpers::extractInt($offset, 1, 0, true);
|
||||
} catch (CalcExp $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
if (StringHelper::countCharacters($haystack) >= $offset) {
|
||||
if (StringHelper::countCharacters($needle) === 0) {
|
||||
return $offset;
|
||||
}
|
||||
|
||||
$pos = mb_strpos($haystack, $needle, --$offset, 'UTF-8');
|
||||
if ($pos !== false) {
|
||||
return ++$pos;
|
||||
}
|
||||
}
|
||||
|
||||
return ExcelError::VALUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* SEARCH (case insensitive search).
|
||||
*
|
||||
* @param mixed $needle The string to look for
|
||||
* Or can be an array of values
|
||||
* @param mixed $haystack The string in which to look
|
||||
* Or can be an array of values
|
||||
* @param mixed $offset Integer offset within $haystack to start searching from
|
||||
* Or can be an array of values
|
||||
*
|
||||
* @return array|int|string The offset where the first occurrence of needle was found in the haystack
|
||||
* If an array of values is passed for the $value or $chars arguments, then the returned result
|
||||
* will also be an array with matching dimensions
|
||||
*/
|
||||
public static function insensitive(mixed $needle, mixed $haystack, mixed $offset = 1): array|string|int
|
||||
{
|
||||
if (is_array($needle) || is_array($haystack) || is_array($offset)) {
|
||||
return self::evaluateArrayArguments([self::class, __FUNCTION__], $needle, $haystack, $offset);
|
||||
}
|
||||
|
||||
try {
|
||||
$needle = Helpers::extractString($needle);
|
||||
$haystack = Helpers::extractString($haystack);
|
||||
$offset = Helpers::extractInt($offset, 1, 0, true);
|
||||
} catch (CalcExp $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
if (StringHelper::countCharacters($haystack) >= $offset) {
|
||||
if (StringHelper::countCharacters($needle) === 0) {
|
||||
return $offset;
|
||||
}
|
||||
|
||||
$pos = mb_stripos($haystack, $needle, --$offset, 'UTF-8');
|
||||
if ($pos !== false) {
|
||||
return ++$pos;
|
||||
}
|
||||
}
|
||||
|
||||
return ExcelError::VALUE();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue