Si realmente está buscando la eficiencia, necesitará mantener un puntero - es decir, índice - con su cadena. Muchas funciones de cadena aceptan un desplazamiento para comenzar a operar (como el tercer parámetro de strpos()
). Normalmente, recomendaría escribir un objeto para ajustar esta funcionalidad, pero si espera usar mucho eso, podría causar un cuello de botella de rendimiento. He aquí un ejemplo de lo que quiero decir (sin OO):
while ($whatever) {
$pos = strpos($string, $myToken, $startIndex);
# do something using $pos
$startIndex = $pos;
}
Si lo desea, puede escribir su propia clase de contenedor que hace estas operaciones de cadena y ver si tiene un impacto velocidad:
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
# ...
}
Me gustaría pensar que la asignación sería el asesino, no el substr. – CaffGeek