Если вы действительно ищете эффективность, вам нужно сохранить указатель - я имею в виду index - с вашей строкой.Многие строковые функции принимают смещение для начала работы (например, третий параметр strpos()
).Обычно я бы порекомендовал написать объект, чтобы обернуть эту функциональность, но если вы планируете часто его использовать, это может стать причиной узкого места в производительности.Вот пример того, что я имею в виду (без ОО):
while ($whatever) {
$pos = strpos($string, $myToken, $startIndex);
# do something using $pos
$startIndex = $pos;
}
Если вы хотите, вы можете написать свой собственный класс-обертку, который выполняет эти строковые операции, и посмотреть, влияет ли он на скорость:
class _String {
private $string;
private $startIndex;
private $length;
public function __construct($string) {
$this->string = $string;
$this->startIndex = 0;
$this->length = strlen($string);
}
public function substr($from, $length = NULL) {
$this->startIndex = $from;
if ($length !== NULL) {
$this->endIndex = $from + $length;
}
}
# other functions you might use
# ...
}