Encontrar si una cadena contiene otra subcadena, es una tarea de programación habitual.
En PHP, tenemos dos funciones que nos sirven para este propósito: strpos, que retorna la posición; y strstr, que retorna la subcadena.
He creado un sencillo programa que se encarga de medir los tiempos de ejecución de las dos funciones:
<?php
$sTest='1234567890 1234567890 1234567890
1234567890 1234567890 test
1234567890 1234567890 1234567890
1234567890 1234567890 1234567890';
$fInicio=microtime(true);
for ($iCont=0; $iCont<10000; $iCont++)
{
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
$iPos=strpos($sTest, 'test');
}
$fFin=microtime(true);
echo 'strpos: ' . ($fFin-$fInicio) . '<br>';
$fInicio=microtime(true);
for ($iCont=0; $iCont<10000; $iCont++)
{
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
$sPos=strstr($sTest, 'test');
}
$fFin=microtime(true);
echo 'strstr: ' . ($fFin-$fInicio) . '<br>';
?>
Ejecutando el código en mi ordenador, bajo PHP 5.0.3, he obtenido los siguientes resultados:
Función | Tiempo (segundos) | Variación |
strpos | 0.68073296546936 | 100,00% |
strstr | 0.70139002799988 | 103,03% |
Como era de esperar, strpos es más eficiente, pero tan solo por un pequeño margen del 3%.