forked from museum-digital/MD_STD
Add function to get next strpos of any of a specified set of needles
This commit is contained in:
@@ -986,4 +986,43 @@ final class MD_STD {
|
||||
} . $year . '-' . $month . '-' . $day;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the next occurence of any of a given set of substrings.
|
||||
*
|
||||
* @param string $haystack The string to search in.
|
||||
* @param non-empty-array<non-empty-string> $needles The strings to search for.
|
||||
* @param integer $offset If specified, search will
|
||||
* start this number of
|
||||
* characters counted from
|
||||
* the beginning of the string.
|
||||
* If the offset is negative,
|
||||
* the search will start this
|
||||
* number of characters
|
||||
* counted from the end of
|
||||
* the string.
|
||||
*
|
||||
* @return array{position: integer, needle: string}|array{}
|
||||
*/
|
||||
public static function strpos_multi(string $haystack, array $needles, int $offset = 0):array {
|
||||
|
||||
$lowest_option = [];
|
||||
foreach ($needles as $needle) {
|
||||
|
||||
if (($pos = strpos($haystack, $needle, $offset)) !== false) {
|
||||
|
||||
if (empty($lowest_option)) {
|
||||
$lowest_option = ['position' => $pos, 'needle' => $needle];
|
||||
}
|
||||
else if ($pos < $lowest_option['position']) {
|
||||
$lowest_option = ['position' => $pos, 'needle' => $needle];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $lowest_option;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user