variable una session_destroy sesion saber recuperar inicializar ini_set destruir delete como php

session_destroy - ¿Cómo verificar si una cadena comienza con "_" en PHP?



recuperar session php (7)

Aquí hay un mejor comienzo con la función:

function mb_startsWith($str, $prefix, $encoding=null) { if (is_null($encoding)) $encoding = mb_internal_encoding(); return mb_substr($str, 0, mb_strlen($prefix, $encoding), $encoding) === $prefix; }

Esta pregunta ya tiene una respuesta aquí:

Ejemplo: Tengo una $variable = "_foo" , y quiero estar absolutamente seguro de que la variable $ no comienza con un guión bajo "_" . ¿Cómo puedo hacer eso en PHP? ¿Hay algún acceso a la matriz de caracteres detrás de la cadena?


Desde que alguien mencionó la eficiencia, he evaluado las funciones dadas hasta ahora por curiosidad:

function startsWith1($str, $char) { return strpos($str, $char) === 0; } function startsWith2($str, $char) { return stripos($str, $char) === 0; } function startsWith3($str, $char) { return substr($str, 0, 1) === $char; } function startsWith4($str, $char){ return $str[0] === $char; } function startsWith5($str, $char){ return (bool) preg_match(''/^'' . $char . ''/'', $str); } function startsWith6($str, $char) { if (is_null($encoding)) $encoding = mb_internal_encoding(); return mb_substr($str, 0, mb_strlen($char, $encoding), $encoding) === $char; }

Aquí están los resultados en mi máquina DualCore promedio con 100,000 carreras cada uno

// Testing ''_string'' startsWith1 took 0.385906934738 startsWith2 took 0.457293987274 startsWith3 took 0.412894964218 startsWith4 took 0.366240024567 <-- fastest startsWith5 took 0.642996072769 startsWith6 took 1.39859509468 // Tested "string" startsWith1 took 0.384965896606 startsWith2 took 0.445554971695 startsWith3 took 0.42377281189 startsWith4 took 0.373164176941 <-- fastest startsWith5 took 0.630424022675 startsWith6 took 1.40699005127 // Tested 1000 char random string [a-z0-9] startsWith1 took 0.430691003799 startsWith2 took 4.447286129 startsWith3 took 0.413349866867 startsWith4 took 0.368592977524 <-- fastest startsWith5 took 0.627470016479 startsWith6 took 1.40957403183 // Tested 1000 char random string [a-z0-9] with ''_'' prefix startsWith1 took 0.384054899216 startsWith2 took 4.41522812843 startsWith3 took 0.408898115158 startsWith4 took 0.363884925842 <-- fastest startsWith5 took 0.638479948044 startsWith6 took 1.41304707527

Como puede ver, tratar la pajar como una matriz para descubrir el carácter en la primera posición es siempre la solución más rápida . También se realiza siempre a la misma velocidad, independientemente de la longitud de la cadena. Usar strpos es más rápido que substr para cadenas cortas pero más lento para cadenas largas, cuando la cadena no comienza con el prefijo. Sin embargo, la diferencia es irrelevante. stripos es increíblemente lento con cuerdas largas. preg_match realiza casi lo mismo independientemente de la longitud de la cuerda, pero solo tiene una velocidad mediocre. La solución mb_substr tiene el peor desempeño, aunque probablemente sea más confiable.

Dado que estos números son para 100.000 carreras, debería ser obvio que estamos hablando de 0.0000x segundos por llamada. Elegir uno sobre el otro por eficiencia es una startsWith sin valor, a menos que su aplicación esté startsWith comprobación de la vida.


Esta es la respuesta más simple cuando no te preocupa el rendimiento:

if (strpos($string, ''_'') === 0) { # code }

Si strpos devuelve 0 , significa que lo que estaba buscando comienza en el carácter 0 , el inicio de la cadena.

Se documenta a fondo aquí: http://uk3.php.net/manual/en/function.strpos.php

(PS $string[0] === ''_'' es la mejor respuesta)


Para construir sobre la respuesta de pinusnegra, y en respuesta al comentario de Gumbo sobre esa respuesta:

function has_leading_underscore($string) { return $string[0] === ''_''; }

Al ejecutarse en PHP 5.3.0, lo siguiente funciona y devuelve el valor esperado, incluso sin verificar si la cadena tiene al menos 1 carácter de longitud:

echo has_leading_underscore(''_somestring'').'', ''; echo has_leading_underscore(''somestring'').'', ''; echo has_leading_underscore('''').'', ''; echo has_leading_underscore(null).'', ''; echo has_leading_underscore(false).'', ''; echo has_leading_underscore(0).'', ''; echo has_leading_underscore(array(''_foo'', ''bar'')); /* * output: true, false, false, false, false, false, false */

No sé cómo reaccionarán otras versiones de PHP, pero si todas funcionan, entonces este método es probablemente más eficiente que la ruta substr.



function starts_with($s, $prefix){ // returns a bool return strpos($s, $prefix) === 0; } starts_with($variable, "_");


$variable[0] != "_"

¿Como funciona?

En PHP puede obtener el carácter particular de una cadena con notación de índice de matriz. $variable[0] es el primer carácter de una cadena (si $ variable es una cadena).