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%.